gpt4 book ai didi

c - dup2() 在 C 中做什么

转载 作者:太空狗 更新时间:2023-10-29 15:12:19 24 4
gpt4 key购买 nike

我在手册页中查找了它,但我还是不明白...

假设您有 dup2(f1,0)。那会用 stdin 切换 filedesc.1 然后锁定 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);

关于c - dup2() 在 C 中做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24538470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com