x1b Asked: 2018-12-11 07:26:31 +0800 CST2018-12-11 07:26:31 +0800 CST 2018-12-11 07:26:31 +0800 CST 分叉的孩子是否总是获得与父母的文件 ID 相同的文件 ID? 772 这可能是一个幼稚的问题,但在父open调用中给出的返回给我 File ID 4。 是否保证子进程也将始终获得 File ID 4? files fork 2 个回答 Voted RalfFriedl 2018-12-11T10:17:49+08:002018-12-11T10:17:49+08:00 成功open的调用会返回最小的数字作为尚未使用的文件描述符。 因此,如果open返回 4,则表示文件描述符 0-3 已在使用中。由于 afork向子节点提供了相同的文件描述符,因此子节点也将使用 fd 0-3 并且 fd 4 空闲,因此open在父节点和子节点中的两次成功调用fork将返回相同的数字。但是如果父母或孩子在 之后打开或关闭了文件fork,数字可能会有所不同。 一般来说,你不应该依赖预测open调用的 fd,除非你有充分的理由并且你非常确定你可以正确地预测它。 Best Answer ctrl-alt-delor 2018-12-11T08:42:43+08:002018-12-11T08:42:43+08:00 是的,当你 fork 时,所有打开的文件 ID 都会复制到孩子。 见人叉 子继承父的一组打开文件描述符的副本。子文件中的每个文件描述符与父文件中的相应文件描述符引用相同的打开文件描述(请参阅 open(2))。这意味着两个描述符共享打开文件状态标志、当前文件偏移量和信号驱动的 I/O 属性(参见 fcntl(2) 中对 F_SETOWN 和 F_SETSIG 的描述)。
成功
open
的调用会返回最小的数字作为尚未使用的文件描述符。因此,如果
open
返回 4,则表示文件描述符 0-3 已在使用中。由于 afork
向子节点提供了相同的文件描述符,因此子节点也将使用 fd 0-3 并且 fd 4 空闲,因此open
在父节点和子节点中的两次成功调用fork
将返回相同的数字。但是如果父母或孩子在 之后打开或关闭了文件fork
,数字可能会有所不同。一般来说,你不应该依赖预测
open
调用的 fd,除非你有充分的理由并且你非常确定你可以正确地预测它。是的,当你 fork 时,所有打开的文件 ID 都会复制到孩子。
见人叉