LINUX.ORG.RU

sendmsg с файловым дескриптором, открытым в обоих процессах


0

1

Доброго дня.

Вопрос следующий:
У меня есть 2 процесса (A и B), в обоих есть открытый файловый дескриптор. Я отправляю его из A в B при помощи sendmsg(..).
Будет ли в B создан новый дескриптор для того же файла (т.е. в B мы получим эффект, эквивалентный dup(..)), или нет?


Что-то? Как это «отправить дескриптор при помощи sendmsg»? Ты номер дескриптора чтоли отправляешь?

DELIRIUM ☆☆☆☆☆
()

Как я понимаю там всегда эквивалент dup() вне зависимости есть такой fd у принимающего процесса или нет.

anonymous
()
Ответ на: комментарий от DELIRIUM

> Ты номер дескриптора чтоли отправляешь?
Я отправляю дескриптор, чтобы получить доступ к ресурсу из процесса B.

Как я понимаю там всегда эквивалент dup() вне зависимости есть такой fd у принимающего процесса или нет.

dup() клонирует дескриптор.
Если у принимающего процесса нет такого дескриптора, о каком эквиваленте dup() может идти речь?

Spym
() автор топика
Ответ на: комментарий от Spym

Имеется ввиду что при успешном recvmsg() ядро сделает копию переданного дескриптора через scm_fp_dup()

anonymous
()
Ответ на: комментарий от Spym

> Я отправляю дескриптор, чтобы получить доступ к ресурсу из процесса B

Код в студию. У тебя есть только номер дескриптора, и если ты отправляешь его, никакого доступа ты никуда не получишь.

slovazap ★★★★★
()
Ответ на: комментарий от Spym

Этот бред работает только потому, что после fork'а дескрипторы в child'е наследуются от родителя. Копировать в таком случае ничего не надо, потому что вы их и так знаете - в частности, можно было просто использовать socks. Если процессы не связаны, или если дескриптор был открыт после форка, ничего разумеется не сработает. Я не знаю каким ламером надо быть, чтобы предположить что при передаче инта через сокет у вас магически вызовется dup.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

2slovazap: не позорьтесь. Чем говорить глупости почитайте Стивенса или сделайте RTFS какой-нибудь уважаемой проги, например postfix, ну или хотя бы погугите «file descriptor passing».

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.