我从调用者那里得到一个有效的"fd"对象.我怎样才能找出fd类型是什么 - 它是指文件,套接字,设备等?根据引用的类型,我需要执行特定的功能,比如如果fd与文件关联,那么我需要进行读取.如果它与套接字关联,那么我需要获取套接字属性.
好吧,至少在理论上,你仍然可以读取套接字,设备和管道......以及......
如果您想从套接字获取更多数据,例如套接字地址,您可以调用函数来执行此操作.对于非套接字而言,它将失败,由您来决定如何处理它.
如果你真的必须知道,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)