2017-02-18 25 views
1
int fd = socket(//arguments); 

Можно ли передать этот дескриптор другому процессу через IPC и по-прежнему быть действительным или локально для процесса, который его создал?Является ли дескриптор файла локальным для своего процесса или глобальным в Unix

+0

Если бы это было глобально, как различные процессы могли использовать одни и те же номера дескрипторов для стандартных потоков? – Dmitri

+0

Вы правы, я забыл об этом. Глупый вопрос. –

ответ

2

Да, дескрипторы файлов являются локальными для процесса. Однако, когда процесс перескакивает ребенка, родитель и ребенок имеют одну и ту же таблицу дескриптора файла. Это здорово, потому что это позволяет перенаправить IO, что довольно удобно.

5

Файловые дескрипторы являются локальными для процесса. Например, каждый процесс будет иметь свой стандартный ввод, вывод и ошибку в дескрипторах файлов 0, 1 и 2.

It is possible to pass a file descriptor to another process over a UNIX domain socket. Когда это будет сделано, каждый процесс будет иметь копию дескриптора файла, возможно, под другим FD номер. Это своего рода грязный API, и он редко используется.