2009-05-10 54 views
2

我從調用者那裏獲得一個有效的「fd」對象。我怎麼知道什麼是FD類型 - 無論是指文件,套接字,設備等? 取決於引用的類型,我需要執行特定的功能,比如說如果fd與文件關聯,那麼我需要執行讀取。如果它與一個套接字關聯,那麼我需要獲取套接字屬性。如何獲得與fd相關的設備類型

回答

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 */ 
} 
+0

'如果你真的必須know'我真的必須知道。 – 2014-06-11 20:29:03