Python中recvmsg的等效方法是什么?
我正在写一个Python脚本,目的是通过编程方式进行fuse挂载。我已经用C语言写了一个类似的程序,利用了socketpair和recvmsg这两个接口。但是在Python中,recvmsg这个功能没有实现,所以我遇到了困难。有没有人能告诉我在Python中有什么类似的功能?任何帮助都非常感谢。
让我解释一下我为什么需要recvmsg,我需要把fuse挂载的文件描述符从子进程发送到父进程。
2 个回答
在Python3中,socket.recvmsg现在可以在socket
模块中使用。根据文档,这个功能应该能帮你实现你想要的事情(虽然来得有点晚!):
在某些系统上,sendmsg()和recvmsg()可以用来通过AF_UNIX套接字在进程之间传递文件描述符。当使用这个功能时(通常只限于SOCK_STREAM套接字),recvmsg()会在它的附加数据中返回一些形式为(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)的项目,其中fds是一个字节对象,表示新的文件描述符,作为本地C整型的二进制数组。如果recvmsg()在系统调用返回后抛出异常,它会首先尝试关闭通过这种机制接收到的任何文件描述符。
你可以考虑使用pyx或者一个C语言模块,这个模块可以在Python中实现你需要的功能。这样,你就可以在Python脚本中操作或使用这个模块。这样做的好处是,你可以传递文件描述符,让Python脚本对它进行处理。
另外,你还可以写一个小的C语言包装器,这个包装器负责处理recvmsg,只有在它获取到文件描述符并打开之后才会进行fork操作。所有打开的文件描述符在fork之后都会保持打开状态,然后再执行exec,甚至可以直接使用exec,这样你就不需要担心Python会接收到它。