编程实现文件重定向

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的概念 | 软硬链接

linux shell脚本编程笔记: 重定向

301重定向没有片段[重复]