Файловые дескрипторы являются целыми числами.Они используются для индексации в таблице процессов файловой информации, поддерживаемой ядром.Вы не можете ожидать, что дескриптор файла будет «переносимым» к другим процессам.
Это работает (в некоторой степени), если вы создаете файлы до , вызывая fork()
, так как таблица дескрипторов файловявляется частью процесса и, следовательно, clone()
d при создании дочернего элемента.Для файловых дескрипторов, размещенных после разделения процессов, например, при использовании accept()
для получения нового сокета, вы не можете сделать это.
UPDATE : кажется, есть способ, используя sendmsg()
с сокетами AF_UNIX, см. здесь для деталей, как упомянуто в этом вопросе .Я не знал этого, звучит немного «волшебно», но, видимо, это хорошо зарекомендовавший себя механизм, так почему бы не пойти дальше и реализовать это.