Тип дескриптора Linux

Как я могу получить тип дескриптора? Я использую epoll для мониторинга множества дескрипторов, таких как сокеты, таймеры и сигналы. Я видел, что это возможно с помощью fstat, но режим говорит только о сокетах и ​​каналах. man-страница fstat. Есть ли специальная функция для идентификации дескриптора?

1 ответ

Решение

Я не думаю, что есть какой-то простой или единый способ сделать то, что вы просите. Команде lsof] 1 удается определить эту информацию, поэтому вы можете взглянуть на этот код, чтобы увидеть, что они делают.

Сверху головы, чтобы определить, является ли дескриптор сокетом, вы можете использовать getsockopt(2). Если вызов getockopt завершается неудачно и errno == ENOTSOCK, ваш дескриптор не является сокетом. аналогично вы можете использовать isatty(3), чтобы определить, принадлежит ли дескриптор к последовательному порту или терминалу.

Другие вопросы по тегам