当孩子被分叉时,它会继承父对象的文件描述符,如果孩子关闭了文件描述符,将会发生什么?如果孩子开始写文件,那么在父母的末端文件将如何处理?谁来管理这些不一致,内核还是用户?
当进程调用该close
函数以通过文件描述符关闭特定打开的文件时。在进程的文件表中,引用计数减一。但是由于父级和子级都持有同一个文件,因此引用计数为2,关闭后该引用计数减少为1。由于它不是零,因此该进程仍然可以继续使用文件而没有任何问题。
请参阅Terrence Chan UNIX系统编程,(Unix内核对Files的支持)。
open()
和fork()
有一个区别文件DESCRIPT,或者和一个文件descipt离子 -前者是指到了后来,虽然在一个叉的描述符的副本,他们指的是相同的描述。但是,经过测试很明显,这并不意味着关闭孩子的手柄会关闭父母的手柄。我认为,当两个句柄都进行写操作时,这可能会对数据的交错产生微妙的影响,但是无论如何这都是不确定的,因此确切如何发生并不那么重要。