相关疑难解决方法(0)

任何人都可以在fork()之后解释关于'文件描述符'的简单描述吗?

在"Unix环境中的高级编程",第2版,作者:W.Richard Stevens.

第8.3节fork函数.

这是描述:

父和子共享相同的文件偏移量很重要.

考虑一个分叉孩子的过程,然后等待孩子完成.假设两个进程都写入标准输出作为其正常处理的一部分.如果父级的标准输出重定向(可能是shell),则当子级写入标准输出时,子级必须更新父级的文件偏移量.

[1.这是什么意思?例如,如果父项的std输出被重定向到'file1',那么子项写入后子项应该更新什么?parent的原始std输出偏移量或重定向输出(即file1)偏移量?不能晚了,对吧?

[2.更新是如何完成的?由子显式,由OS隐式地,由文件描述符本身?在fork之后,我认为父母和孩子走自己的路,并拥有自己的文件描述符COPY.那么孩子如何更新偏移到父方?]

在这种情况下,孩子可以在父母等待时写入标准输出; 在孩子完成后,父母可以继续写入标准输出,知道其输出将附加到孩子写的任何内容.如果父级和子级没有共享相同的文件偏移量,则此类交互将更难以完成,并且需要父级的显式操作.

如果父节点和子节点都写入相同的描述符,而没有任何形式的同步,例如让父节点等待子节点,则它们的输出将被混合(假设它是在fork之前打开的描述符).虽然这是可能的,但这不是正常的操作模式.

在fork之后处理描述符有两种正常情况.

  1. 父母等待孩子完成.在这种情况下,父级不需要对其描述符执行任何操作.当子进程终止时,子进程读取或写入的任何共享描述符将相应地更新其文件偏移量.

  2. 父母和孩子都有自己的方式.这里,在fork之后,父关闭它不需要的描述符,并且子进行相同的操作.这样,既不会干扰对方的开放描述符.网络服务器经常出现这种情况."

[3.当调用fork()时,我理解的是那个子得到了父有什么的COPY,在这种情况下是文件描述符,并做了它的事情.如果任何偏移更改为父和子共享的文件描述符,则只能因为描述符记住偏移本身.我对吗?]

对不起,我对这些概念不太了解.

有帮助吗?谢谢.

c unix fork file-descriptor

33
推荐指数
2
解决办法
3万
查看次数

儿童父母关系与继承

我对C全新.

  1. 在使用fork();?创建的子项中继承的进程项是什么?

  2. 与流程的父级不同的流程项有哪些?

c fork

8
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×2

fork ×2

file-descriptor ×1

unix ×1