dup2()在C中做什么?



我在手册页上查了一下,但还是没有找到…

假设你有dup2(f1,0)。是否会切换filedesc。1与stdin,然后锁定stdin?

dup2不切换文件描述符,它使它们相等。在dup2(f1, 0)之后,在描述符f1上打开的任何文件现在也在描述符0上打开(以相同的模式和位置),即在标准输入上。

如果目标文件描述符(这里是0)是打开的,它将被dup2调用关闭。因此:

before                         after
0: closed, f1: somefile        0: somefile, f1:somefile
0: otherfile, f1: somefile     0: somefile, f1:somefile

不涉及锁定。

dup2是有用的(除其他外)当你的程序的一部分从标准文件描述符读写时。例如,假设somefunc()从标准输入中读取,但是您希望它从程序其他部分获取标准输入的不同文件中读取。然后可以执行(错误检查省略):

int save_stdin = dup(0);
int somefunc_input_fd = open("input-for-somefunc.data", O_RDONLY);
dup2(somefunc_input_fd, 0);
/* Now the original stdin is open on save_stdin, and input-for-somefunc.data on both somefunc_input_fd and 0. */
somefunc();
close(somefunc_input_fd);
dup2(save_stdin, 0);
close(save_stdin);

相关内容

  • 没有找到相关文章

最新更新