Как получить тип устройства, связанный с FD - PullRequest
2 голосов
/ 10 мая 2009

я получаю действительный объект "fd" от абонента. Как я могу узнать, что такое тип fd - относится ли он к файлу, сокету, устройству и т. Д.? В зависимости от указанного типа, мне нужно выполнить определенные функции, скажем, если fd связан с файлом, то мне нужно сделать чтение. Если это связано с сокетом, то мне нужно получить свойства сокета.

1 Ответ

6 голосов
/ 10 мая 2009

Ну, по крайней мере, в теории, вы все равно делаете чтение для сокета, и для устройства, и для канала, и ....: -P

Если вам нужно больше данных из сокета, таких как адреса сокетов, вы можете просто вызвать функции для этого. Он просто потерпит неудачу для не-сокетов, и вам решать, как вы хотите с этим справиться.


Если вы действительно должны знать, введите fstat в вашем файловом дескрипторе, а затем посмотрите на его режим (st_mode):

mode_t type;
struct stat fdstat;
/* ... */
if (fstat(fd, &fdstat) == -1)
    /* error out */
type = fdstat.st_mode & S_IFMT;
switch (type) {
case S_IFSOCK:
    /* socket */
case S_IFIFO:
    /* FIFO */
/* other cases */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...