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/tty1指向了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;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部