dup2和dup函数
dup2和dup函数
- 1. dup2
- 2. dup

1. dup2
dup2的作用是使得 newfd 指向 oldfd 对应的文件,可以实现重定向。
int dup2(int oldfd, int newfd);
关闭newfd对应的文件描述符,讲newfd重新指向为oldfd对应的文件
文件描述符实际上是一个句柄,句柄指向一个文件。dup2的作用是使得 newfd 指向 oldfd 对应的文件。
比如打开一个文件,使用dup2函数,上图就变成下图了(即原来指向/dev/tty的1指向了3指向的那个文件,3指向的是一个新打开的文件)
dup2(3,1);


2. dup
返回一个新的、指向oldfd对应文件的 文件描述符,实现复制文件描述符
int dup(int oldfd);
它的作用是复制文件描述符,即如下图所示,执行dup(3),则新开的文件描述符4也指向了3所指的文件

使用示例
代码中执行2次printf("hello world\n");,一次输出到hello文件中,后一次输出到屏幕上
注意:printf想写到文件里,只是指定文件描述符还不够,还需要刷新一次,否则printf的东西还保留在缓冲区中。
#include
#include
#include
#include
#include int main(){//先备份现场int outfd = dup(1);//打开Word文件,给他写权限,如果没有,则创建文件。int fd = open("world",O_WRONLY|O_CREAT,0666);//先做重定向,将标准输出重定向到fd对应的文件dup2(fd,1);//printf调用write的时候需要一个刷新机制,否则就写不到Word文件中,而是依然存储在缓冲区//因此需要用fflush进行刷新。printf("hello world\n");//需要来一次刷新下fflush(stdout);//需要恢复文件描述符1,使其重新对应标准输出 dup2(outfd,1);printf("hello world\n");close(fd);return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
