所以,我一直在閱讀關於select和poll手冊頁,但不幸的是,我仍然對某些事情感到困惑。如果有人能爲我回答以下問題,這將很好:Linux中的select()和poll()
- 當非阻塞模式打開文件時會發生什麼? (O_NONBLOCK標誌被設置)
- 當有數據是緩衝區時,read()阻塞或返回什麼?
- 當緩衝區中沒有任何數據要讀取時會發生什麼?
所以,我一直在閱讀關於select和poll手冊頁,但不幸的是,我仍然對某些事情感到困惑。如果有人能爲我回答以下問題,這將很好:Linux中的select()和poll()
當文件以非阻塞模式打開時會發生什麼? (O_NONBLOCK 標記被設置)
當有數據是緩衝區時,read()阻塞或返回什麼?
而當緩衝區中沒有任何數據要讀取時會發生什麼?
當在一個文件中非阻塞模式下打開,會發生什麼? (設置了O_NONBLOCK標誌)
I/O操作不會阻塞,而是返回一個錯誤代碼,指示它們將被阻塞。
當有數據是緩衝區時,read()阻塞或返回什麼?
當緩衝區中有數據時,read
返回它。
當沒有在緩衝區中的所有數據讀取時會發生什麼?
如果套接字被阻塞,它將阻塞,直到可以返回一些數據。如果套接字是非阻塞的,它將返回一個錯誤代碼,指示在套接字被阻塞時它將被阻塞。
順便說一句,select
和poll
的一個重要警告 - 它們應該幾乎從不用於阻塞套接字。當您從select
或poll
中獲得讀取或寫入命中時,這意味着您在調用函數時以及返回時不會阻止的某個時間在中間執行的假設的規範操作。這些是狀態報告功能,不提供未來保證。如果您正在編寫一個永遠不會阻塞的程序,則它必須將其所有套接字設置爲非阻塞狀態。