Возможно ли в unix создать файловый дескриптор, не создавай и не открывая файл с помощью open?
Возможно ли в unix создать файловый дескриптор, не создавая сам файл?
У меня возникла идея, реализовать пул thred'ов c помощью epoll. Т.е для каждого thred'а создается свой файловый дескриптор, и когда thred свободен, писать что нибудь в файловый дескриптор. Epoll бы это отлавливал, и при вызове epoll_wait возвращал бы список дескрипторов тех thred'ов, которые не заняты рабртой. Я знаю, что есть fork, но для выполнения задачи требуется одно адресное пространство. Или если это невозможно, как в процесс, созданный с помощью fork передать дескриптор сокета(если дексриптор был открыт после содания процесса)
Ответы (1 шт):
Т.е для каждого thred'а создается свой файловый дескриптор, и когда thred свободен, писать что нибудь в файловый дескриптор. Epoll бы это отлавливал, и при вызове epoll_wait возвращал бы список дескрипторов тех thred'ов, которые не заняты рабртой.
Классическое решение — использовать трубы (man 2 pipe) или сигналы (второе относительно сложно и надо быть аккуратным).
Linux-специфичный вариант для использования вместо трубы для уведомления только о событиях — eventfd.
Для дуплексного общения между двумя потоками вместо трубы можно также использовать socketpair.