Тип дескриптора Linux
Как я могу получить тип дескриптора? Я использую epoll для мониторинга множества дескрипторов, таких как сокеты, таймеры и сигналы. Я видел, что это возможно с помощью fstat, но режим говорит только о сокетах и каналах. man-страница fstat. Есть ли специальная функция для идентификации дескриптора?
1 ответ
Я не думаю, что есть какой-то простой или единый способ сделать то, что вы просите. Команде lsof] 1 удается определить эту информацию, поэтому вы можете взглянуть на этот код, чтобы увидеть, что они делают.
Сверху головы, чтобы определить, является ли дескриптор сокетом, вы можете использовать getsockopt(2). Если вызов getockopt завершается неудачно и errno == ENOTSOCK, ваш дескриптор не является сокетом. аналогично вы можете использовать isatty(3), чтобы определить, принадлежит ли дескриптор к последовательному порту или терминалу.