2012-05-11 31 views
1

是否有一個引用文檔描述了POSIX系統調用的阻塞行爲?哪些POSIX系統調用可能會阻塞進程?

到目前爲止,我的啓發式已標記爲可能會阻止任何可能因EINTR而失敗的功能?這是一個必要和充分的條件?

+0

我沒有一個清單,但我懷疑這不是必要的條件。例如,'unlink(2)'不會將'EINTR'指定爲可能的錯誤,但它可能會阻塞(在磁盤訪問上)。可能有許多其他人喜歡它。 – Celada

回答

0

坦白地說,據我所知,只需看man頁面並使用常識。即使呼叫沒有指定EINTR,也要考慮它的作用。我可能是錯的,但在我看來,POSIX庫中的每個調用默認都會阻塞,並且只會在非阻塞模式下執行(通過各種標誌),但我還沒有看到一個解除阻塞的調用默認情況下(這將做任何事情,但取消阻止)。

+0

作爲聲明'POSIX庫中的每個調用默認都會阻塞'的反例,getpid()系統調用不會被阻塞;期。 –

+1

'man'頁面沒有提供足夠的信息,我不相信我的常識。例如'socket(2)','shutdown(2)','fnctl(2)'和命令F_SETFL等,這就是爲什麼我想要一個全面的文檔告訴我這一點。 –

+1

@JonathanLeffler:但它也不是不同步的。它確實返回它的作業返回的值,這意味着它不是非阻塞的。這不像你調用'getpid()'然後執行其他代碼,然後得到結果。 – Linuxios