程序可能首先發出一個異步I/O操作,其中aio_read()
或aio_write()
然後調用exit()
自行終止。執行異步I/O操作時退出
...
aio_write(aiocbp);
exit(0);
我的問題是,將exit()
呼叫等待,直到異步I/O完成或計劃將直接終止?
程序可能首先發出一個異步I/O操作,其中aio_read()
或aio_write()
然後調用exit()
自行終止。執行異步I/O操作時退出
...
aio_write(aiocbp);
exit(0);
我的問題是,將exit()
呼叫等待,直到異步I/O完成或計劃將直接終止?
我相信,在標準的相關語言是:
過程終止的後果
所有的文件描述符,目錄流,轉換描述符和消息清單描述符在調用進程中打開的應被關閉。
來源: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
因此,它是不明;未完成的操作被取消,或者操作阻塞直到完成。
如果一個實現的'的atexit()'處理程序,明確提出'關閉()'上掛起的異步I描述符/ O操作,然後檢查每個異步I/O狀態與'則aio_error()',現在看來,這總是被允許的,然後一些返回'ECANCELED'和其他人返回成功。我會想象那麼,該標準旨在盡最大努力,取消執行,但也承認比賽條件,即實現不必嘗試修復。 – jxh
這是一個非常有用的解釋。 –
注意困惑的一點是,我所提供的第一引證認爲「應被關閉」,而不是「應當由'close'彷彿只有」留位模糊的。如果我沒有記錯,奧斯汀集團計劃在某個時候弄清楚這個問題,但我不具備參考得心應手。 –