我正在实现一个python脚本以编程方式进行熔丝安装。我用C语言编写了一个等价物,使用了socketpair和recvmsg api。但是在python recvmsg没有实现,所以我被卡住了。谁能告诉我一个python相当于此?任何帮助将不胜感激。
让我告诉我为什么需要recvmsg,我需要将保险丝座的fd从孩子发送给父母。
答案 0 :(得分:1)
你可以看到的是使用Python的pyx或C模块来实现C中所需的功能,然后你可以从Python脚本中操作或使用它。这将允许您通过文件描述符发送并让Python脚本对其进行操作。
你可以做的其他事情是编写一个小的C包装器,它处理recvmsg,直到它获得fd并打开它才能执行fork。所有打开的文件描述符在fork时都会保持打开状态,然后exec甚至只是普通的exec,这意味着你不必担心Python会接收它。
答案 1 :(得分:1)
作为Python3 socket.recvmsg的一部分现在可以在socket
模块中使用,根据文档,它应该允许你做你想做的事情(虽然相当晚!):
在某些系统上,sendmsg()和recvmsg()可用于传递文件 AF_UNIX套接字上的进程之间的描述符。当这个 使用工具(它通常仅限于SOCK_STREAM套接字), recvmsg()将在其辅助数据中返回表单的项目 (socket.SOL_SOCKET,socket.SCM_RIGHTS,fds),其中fds是一个字节 将新文件描述符表示为二进制数组的对象 native C int类型。如果recvmsg()在系统之后引发异常 调用返回,它将首先尝试关闭任何文件描述符 通过这种机制收到。