如何获取与fd关联的设备类型

时间:2009-05-10 15:15:38

标签: linux

我从来电者那里得到一个有效的“fd”对象。我怎样才能找出fd类型是什么 - 它是指文件,套接字,设备等? 根据引用的类型,我需要执行特定的功能,比如如果fd与文件关联,那么我需要进行读取。如果它与套接字相关联,那么我需要获取套接字属性。

1 个答案:

答案 0 :(得分:6)

嗯,至少在理论上,你仍然可以读取套接字,设备和管道......以及...... :-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 */
}