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

max*_*986 2 linux

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

Chr*_*ung 6

好吧,至少在理论上,你仍然可以读取套接字,设备和管道......以及......

如果您想从套接字获取更多数据,例如套接字地址,您可以调用函数来执行此操作.对于非套接字而言,它将失败,由您来决定如何处理它.


如果你真的必须知道,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 */
}
Run Code Online (Sandbox Code Playgroud)