我在 Linux 中使用套接字和管道时遇到问题。具体来说,我们调用 pipeline(),它分配接下来的两个可用文件描述符...比方说 10 和 11。然后我们在套接字上调用 Accept(),期望它分配 12。相反,它分配了 11。
我们已经进行了一些测试,看来从 pipeline() 返回的第二个 FD 始终可供创建文件描述符的其他系统调用重用。
谁能解释一下吗?
最佳答案
这意味着有人在调用管道之后和第二次系统调用之前的某个时间关闭了有问题的文件描述符。例如,如果您派生出其他进程来在管道的一端执行操作,则可能会搞砸关闭另一进程使用的管道末端的代码,并关闭错误的管道末端。或者任何其他可能在某些文件描述符上调用 close 的东西都可能会关闭错误的东西。
关于linux - 为什么Linux会重用由pipe()分配的文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353113/