编程实现文件重定向

文件重定向涉及关键函数:

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 函数,

若不调用此函数,则重定向失败;

原因不明!

 

总结:

文件描述符是指向打开的文件;

不同的文件描述符可以指向同一个文件;

int close(int fd) 表示断开文件描述符的文件指向;

总之,文件描述符类似指针;

posted @ 2019-05-09 10:24  vsignsoft  阅读(438)  评论(0编辑  收藏  举报