程序可能首先发出一个异步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'仿佛只有”留位模糊的。如果我没有记错,奥斯汀集团计划在某个时候弄清楚这个问题,但我不具备参考得心应手。 –