假设我创建了一个socketpair()
并将其中一个套接字的句柄传递给一个生成的进程(popen
),所述进程是否能够进行通信回到父母身边?
我看到的示例是使用fork()
应用的,这超出了我当前项目的范围。
更新:我尝试了一个简单的测试:
答案 0 :(得分:2)
execve的手册页说明:
File descriptors open in the calling process image remain open in the new
process image, except for those for which the close-on-exec flag is set
(see close(2) and fcntl(2)). Descriptors that remain open are unaffected
by execve().
因为像popen这样的函数是基于execve的,所以你从socketpair函数得到的文件描述符应该在两个进程中都很好,我不明白为什么你不能以任何方式传递描述符。我假设在这种情况下你的意思是将它转换为字符串并将其设置为STDIN到子进程,这将把它转换回int以用作文件描述符。
为...编写一些试用代码肯定是值得的。
答案 1 :(得分:0)
是的,您可以将其传递给子进程。诀窍是socketpair()给你一对连接的套接字 - 确保孩子保持一个,父母保持另一个(父母应该关闭孩子,反之亦然)。
大多数情况下使用一对管道。