文件描述符的复制——实现输出重定向

Posted qiuyuwutong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件描述符的复制——实现输出重定向相关的知识,希望对你有一定的参考价值。

dup(2)   dup2(2)

#include <unistd.h>
int dup(int oldfd);
功能:复制文件描述符
参数:
oldfd:指定源文件的描述符
返回值:
错误 -1 errno被设置
成功 返回新的文件描述符

新的文件描述符使用未使用的、最小的文件描述符

 

int dup2(int oldfd, int newfd);
功能:复制文件描述符
参数:
oldfd:源描述符
newfd:目的描述符
返回值:
错误 -1 errno被设置
成功 返回新的文件描述符

 1 //利用dup和dup2完成输出重定向
 2 #include <stdio.h>
 3 #include <sys/types.h>
 4 #include <sys/stat.h>
 5 #include <fcntl.h>
 6 #include <unistd.h>
 7 #include <string.h>
 8 int main(int argc,char *argv[]){
 9     char *msg="I am test...
";
10     int flags=O_WRONLY|O_CREAT|O_TRUNC;
11     //打开文件,将标准输出重定向到这个文件。argv[1]
12     int fd=open(argv[1],flags,0644);//fd 3
13     if(fd==-1){
14         perror("open");
15         return -1;
16     }
17     int s_fd=dup(1);//s_fd  4 保存现场
18 
19     dup2(3,1);//将文件的描述符定位到标准输出上
20     //关闭文件描述符
21     close(fd);
22     //向标准输出,输出字符串,内容输出到了文件里
23     write(1,msg,strlen(msg));
24     //恢复现场
25     close(1);
26     dup(s_fd);
27     close(s_fd);
28     //输出到显示器 
29     write(1,msg,strlen(msg));
30     return 0;
31 }

 















以上是关于文件描述符的复制——实现输出重定向的主要内容,如果未能解决你的问题,请参考以下文章

彻底搞懂shell的高级I/O重定向

可以通过 shell 重定向捕获彩色输出吗? [复制]

文件描述符的复制

Linux--IO

dup/dup2输出重定向

在 Linux 上使用 Bash 将所有输出重定向到文件? [复制]