2013-06-04 18 views
3

程序可能首先發出一個異步I/O操作,其中aio_read()aio_write()然後調用exit()自行終止。執行異步I/O操作時退出

... 
aio_write(aiocbp); 
exit(0); 

我的問題是,將exit()呼叫等待,直到異步I/O完成或計劃將直接終止?

回答

4

我相信,在標準的相關語言是:

過程終止的後果

所有的文件描述符,目錄流,轉換描述符和消息清單描述符在調用進程中打開的應被關閉。

來源:http://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html

和:

當存在針對法爾茲傑出的取消,異步I/O操作時關閉()被調用時,該I/O操作可能會被取消。未被取消的I/O操作完成,就好像close()操作尚未發生一樣。所有未取消的操作應完成,就好像close()被阻塞直到操作完成。 close()操作本身不需要阻塞等待這樣的I/O完成。是否有任何I/O操作被取消,並且該I/O操作可能被取消的close(),是實現定義。

來源:http://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html

因此,它是不明;未完成的操作被取消,或者操作阻塞直到完成。

+1

如果一個實現的'的atexit()'處理程序,明確提出'關閉()'上掛起的異步I描述符/ O操作,然後檢查每個異步I/O狀態與'則aio_error()',現在看來,這總是被允許的,然後一些返回'ECANCELED'和其他人返回成功。我會想象那麼,該標準旨在盡最大努力,取消執行,但也承認比賽條件,即實現不必嘗試修復。 – jxh

+0

這是一個非常有用的解釋。 –

+0

注意困惑的一點是,我所提供的第一引證認爲「應被關閉」,而不是「應當由'close'彷彿只有」留位模糊的。如果我沒有記錯,奧斯汀集團計劃在某個時候弄清楚這個問題,但我不具備參考得心應手。 –