gpt4 book ai didi

linux - dup2 在这种情况下实际上做了什么?

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:30 25 4
gpt4 key购买 nike

这里我需要澄清一下:我有一些这样的代码:

child_map[0] = fileno(fd[0]);
..
pid = fork();
if(pid == 0)
/* child process*/
dup2(child_map[0], STDIN_FILENO);

现在,STDIN_FILENO 和 child_map[0] 会指向同一个文件描述符吗? future 的输入是否会取自 child_map[0] 和 STDIN_FILENO 指向的文件?我认为 STDIN_FILENO 表示标准输出(终端)。

最佳答案

dup2() 之后,child_map[0]STDIN_FILENO 将继续作为独立的文件描述符 ,但它们将引用相同的打开文件描述。这意味着,例如,如果 child_map[0] == 5STDIN_FILENO == 0,则文件描述符 50 将在 dup2() 之后保持打开状态。

引用相同的打开文件描述意味着文件描述符是可互换的——它们共享属性,如当前文件偏移量。如果您对一个文件描述符执行 lseek(),则两个文件的当前文件偏移量都会更改。

要关闭打开的文件描述,必须关闭指向它的所有文件描述符。

dup2() 之后执行 close(child_map[0]) 是很常见的,它只留下一个打开文件的文件描述符。

关于linux - dup2 在这种情况下实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6686497/

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