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

时间:2021-12-28 21:59:33

前提:基于Linux系统下的学习

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...\n";
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 }

 

相关文章