Python中recvmsg的等效方法是什么?

1 投票
2 回答
3876 浏览
提问于 2025-04-16 19:22

我正在写一个Python脚本,目的是通过编程方式进行fuse挂载。我已经用C语言写了一个类似的程序,利用了socketpair和recvmsg这两个接口。但是在Python中,recvmsg这个功能没有实现,所以我遇到了困难。有没有人能告诉我在Python中有什么类似的功能?任何帮助都非常感谢。

让我解释一下我为什么需要recvmsg,我需要把fuse挂载的文件描述符从子进程发送到父进程。

2 个回答

1

在Python3中,socket.recvmsg现在可以在socket模块中使用。根据文档,这个功能应该能帮你实现你想要的事情(虽然来得有点晚!):

在某些系统上,sendmsg()和recvmsg()可以用来通过AF_UNIX套接字在进程之间传递文件描述符。当使用这个功能时(通常只限于SOCK_STREAM套接字),recvmsg()会在它的附加数据中返回一些形式为(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)的项目,其中fds是一个字节对象,表示新的文件描述符,作为本地C整型的二进制数组。如果recvmsg()在系统调用返回后抛出异常,它会首先尝试关闭通过这种机制接收到的任何文件描述符。

1

你可以考虑使用pyx或者一个C语言模块,这个模块可以在Python中实现你需要的功能。这样,你就可以在Python脚本中操作或使用这个模块。这样做的好处是,你可以传递文件描述符,让Python脚本对它进行处理。

另外,你还可以写一个小的C语言包装器,这个包装器负责处理recvmsg,只有在它获取到文件描述符并打开之后才会进行fork操作。所有打开的文件描述符在fork之后都会保持打开状态,然后再执行exec,甚至可以直接使用exec,这样你就不需要担心Python会接收到它。

撰写回答