假设我创建了一个socketpair(),并将其中一个套接字的句柄传递给一个派生进程(popen),该进程能够与父进程进行通信吗?
我看到的示例是使用fork()应用的,这超出了我当前项目的范围。
更新:我尝试了一个简单的测试:
socketpairposix_spawn和套接字1作为命令行参数。write到套接字..。客户在没有任何警告的情况下退出..。这种方法似乎有问题。
更新:我也找到了这个备注
Pipes and socketpairs are limited to communication between processes with a common ancestor.
发布于 2009-11-05 20:24:39
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的,那么您从套接字对函数获得的文件描述符在两个进程中都应该很好,我不明白为什么不能以任何方式传递描述符。我假设在本例中,您意味着将其转换为字符串,并在STDIN上将其设置为子进程,这将将其转换回int以用作文件描述符。
这当然是值得为之编写一些试用代码的。
发布于 2009-11-06 13:25:06
是的,您可以将它传递给子进程。真正的诀窍是,套接字()给您提供一对连接的套接字--确保子节点保存其中一个,而父节点保存另一个套接字(父节点应该关闭孩子的套接字,反之亦然)。
不过,大多数情况下使用一对管道。
https://stackoverflow.com/questions/1683246
复制相似问题