使用 fstat() 判斷 File Descriptor 的種類

Beej’s Guide 看到這一句話:select() only works with socket descriptors, not file descriptors (like 0 for stdin),想到我之前曾經把 tun/tap 的 file descriptor 丟進 select 裡面,不曉得我是不是做錯了。於是開始了一連串的搜尋,想要搞清楚 select 到底可以接受哪些 file descriptor…

大約花了快兩天的時間,我把相關的關鍵字都搜尋了一遍,然後把 man 2 select 與 man 2 select_tut 也看完了,接著跑去找出之前的程式,確認 tun/tap 並不是 socket descriptor 但是程式卻正常運作….

最後翻出手邊的 Linux 系統程式設計 這本書,把第二章重新看了一遍,發現書中直接就拿 STDIN_FILENO 丟進 select 來當範例。

嗯…難道是 Beej 亂寫嗎?
跑回去看那一篇文章,才發現他寫的是 Note for Windows Programmers 也就是說其實指的是 Winsock 的情況。

算了,反正看了那堆東西我還是有點收穫的,其中之一就是這個,如何判斷 fd 的種類:

參考:http://pubs.opengroup.org/onlinepubs/009695399/functions/fstat.html

發佈留言