что эквивалентно recvmsg в python? - PullRequest
1 голос
/ 11 июня 2011

Я реализую скрипт на python для программного монтирования fuse.Я написал эквивалент в C, используя API-интерфейсы socketpair и recvmsg.Но в python recvmsg не реализован, поэтому я застрял.Может ли кто-нибудь из вас сказать мне эквивалент этого на питоне?Буду признателен за любую помощь.

Позвольте мне сказать, почему мне нужно recvmsg, я должен отправить файл монтирования предохранителя от ребенка к родителю.

Ответы [ 2 ]

1 голос
/ 08 ноября 2017

Как часть Python3 socket.recvmsg теперь доступен в модуле socket, который, согласно документации, должен позволять вам делать то, что вы хотите (хотя и довольно поздно!):

В некоторых системах sendmsg () и recvmsg () могут использоваться для передачи файла дескрипторы между процессами через сокет AF_UNIX. Когда это средство используется (оно часто ограничено сокетами SOCK_STREAM), recvmsg () вернет в своих вспомогательных данных элементы вида (socket.SOL_SOCKET, socket.SCM_RIGHTS, fds), где fds - байты объект, представляющий новые файловые дескрипторы в виде двоичного массива родной тип C int. Если recvmsg () вызывает исключение после системы вызов возвращает, он сначала попытается закрыть любые файловые дескрипторы полученный через этот механизм.

1 голос
/ 21 июня 2011

На что вы могли бы обратить внимание - это использовать pyx или модуль C для Python, который реализует необходимые функции в C, а затем вы можете манипулировать им или использовать его из скрипта Python.Это позволило бы вам переслать дескриптор файла и заставить скрипт Python воздействовать на него.

Другие вещи, которые вы можете сделать, - это написать небольшую оболочку C, которая обрабатывает recvmsg, а не до тех пор, пока не получит этот fd и не получитоткрыл это делает вилку.Все открытые файловые дескрипторы останутся открытыми, когда вы выполните форк, а затем exec или даже просто старый exec, что означает, что вам не нужно беспокоиться о получении его Python.

...