文件描述符的复制——实现输出重定向
前提:基于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 }