编程实现文件重定向
Posted vsignsoft
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程实现文件重定向相关的知识,希望对你有一定的参考价值。
文件重定向涉及关键函数:
int dup(fd) - 新建文件描述符,指向 fd 所指向的文件;
int dup2(fd1, fd2) - fd2 指向 fd1 指向的文件,若fd2事先已经指向某文件,会自动断开指向;
举例:
重定向标准输出,到一个指定的文件。
代码:
几个标准文件描述符:
标准输入 0
标准输出 1
标准错误 2
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <sys/types.h> 4 #include <sys/stat.h> 5 #include <fcntl.h> 6 #include <string.h> 7 8 int main(int argc, char **argv) 9 { 10 printf("before file redirect\n"); // 输出到屏幕 11 char buf[] = "before before\n"; 12 write(1, buf, strlen(buf)); // 输出到屏幕 13 14 int fd_stdout_bak = dup(1); 15 int fd_file = creat("file.dat", 0777); 16 int fd = dup2(fd_file, 1); // 1 指向 file.dat 17 printf("after file redirect, %s - %s\n", argv[0], argv[1]); // 输出到文件 file.dat 18 char buf1[] = "after after\n"; 19 write(1, buf1, strlen(buf1)); // 输出到文件 file.dat 20 21 dup2(fd_stdout_bak, 1); 22 printf("after restore stdout file\n"); // 恢复输出到屏幕 23 char buf2[] = "restore restore\n"; 24 write(1, buf2, strlen(buf2)); // 恢复输出到屏幕 25 26 close(fd_stdout_bak); 27 close(fd_file); 28 29 return 0; 30 }
问题:
在执行标准输出重定向前,一定要先调用 printf 函数,
若不调用此函数,则重定向失败;
原因不明!
以上是关于编程实现文件重定向的主要内容,如果未能解决你的问题,请参考以下文章
Linux系统编程:基础IO 下dup2 实现输出重定向输入重定向追加重定向 | 理解磁盘 | 理解文件系统中inode的概念 | 软硬链接
Linux系统编程:基础IO 下dup2 实现输出重定向输入重定向追加重定向 | 理解磁盘 | 理解文件系统中inode的概念 | 软硬链接
Linux系统编程:基础IO 下dup2 实现输出重定向输入重定向追加重定向 | 理解磁盘 | 理解文件系统中inode的概念 | 软硬链接
Linux系统编程:基础IO 下dup2 实现输出重定向输入重定向追加重定向 | 理解磁盘 | 理解文件系统中inode的概念 | 软硬链接