Возможно ли в unix создать файловый дескриптор, не создавай и не открывая файл с помощью open?

Возможно ли в unix создать файловый дескриптор, не создавая сам файл?

У меня возникла идея, реализовать пул thred'ов c помощью epoll. Т.е для каждого thred'а создается свой файловый дескриптор, и когда thred свободен, писать что нибудь в файловый дескриптор. Epoll бы это отлавливал, и при вызове epoll_wait возвращал бы список дескрипторов тех thred'ов, которые не заняты рабртой. Я знаю, что есть fork, но для выполнения задачи требуется одно адресное пространство. Или если это невозможно, как в процесс, созданный с помощью fork передать дескриптор сокета(если дексриптор был открыт после содания процесса)


Ответы (1 шт):

Автор решения: Fat-Zer

Т.е для каждого thred'а создается свой файловый дескриптор, и когда thred свободен, писать что нибудь в файловый дескриптор. Epoll бы это отлавливал, и при вызове epoll_wait возвращал бы список дескрипторов тех thred'ов, которые не заняты рабртой.

Классическое решение — использовать трубы (man 2 pipe) или сигналы (второе относительно сложно и надо быть аккуратным).

Linux-специфичный вариант для использования вместо трубы для уведомления только о событиях — eventfd.

Для дуплексного общения между двумя потоками вместо трубы можно также использовать socketpair.

→ Ссылка