gpt4 book ai didi

linux - dup() 系统调用的解释

转载 作者:太空狗 更新时间:2023-10-29 11:31:54 28 4
gpt4 key购买 nike

当涉及到复制文件描述符时,我能得到一个关于 dup() 函数的非常简单的解释吗?我想使用管道,但我还必须让 child 从管道中读取(这是简单的部分),但将数据写回父级。我应该使用另一根管道,还是可以使用相同的管道?

最佳答案

dup()(以及 dup2() 和 dup3())创建重复的文件描述符。

操作系统使用一个参数 dup() 选择一个空闲的文件描述符编号,并使其成为传递的文件描述符的副本:

int dup_of_fd = dup(int fd);

对于两个参数 dup2() 它是完全一样的,除了你告诉它你想要用作副本的文件描述符号。如果它已经在使用中(如果 10 在这个例子中已经在使用中)那么它(这里是 10)被关闭并作为副本重新打开:

int dup_of_fd = dup2(fd, 10);

具有三个参数的 dup3()(特定于 Linux)它与 dup2() 相同,只是您可以传递标志/选项。

在所有情况下,新的(复制的)文件描述符将与旧的不同,但读取或写入两者将完全相同。

请注意,当从 2 个重复的文件描述符中读取时,查找位置是共享的,因此如果您打开一个文件并将 fd 复制为 dup_of_fd,然后从 fd 读取 10 个字节,然后从 dup_of_fd 读取 10 个字节,从 dup_of_fd 读取的字节将是字节 11 到 20,即使它是第一次从该文件描述符编号读取。

关于linux - dup() 系统调用的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33379558/

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