码迷,mamicode.com
首页 > 其他好文 > 详细

编程实现文件重定向

时间:2019-05-09 10:44:34      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:nis   ret   turn   一个   文件   ring   输入   tor   types   

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

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

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

原因不明!

编程实现文件重定向

标签:nis   ret   turn   一个   文件   ring   输入   tor   types   

原文地址:https://www.cnblogs.com/vsignsoft/p/10836985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!