3

aio_read()程序可能首先使用or发出异步 I/O 操作,aio_write()然后调用exit()以终止自身。

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

我的问题是,exit()调用会等到异步 i/o 完成还是程序将直接终止?

4

1 回答 1

4

我相信标准中的相关语言是:

进程终止的后果

在调用进程中打开的所有文件描述符、目录流、转换描述符和消息目录描述符都应关闭。

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

和:

当调用 close() 时,如果有一个针对 fildes 的未完成的可取消异步 I/O 操作,则该 I/O 操作可能会被取消。未取消的 I/O 操作将完成,就好像 close() 操作尚未发生一样。所有未取消的操作都应完成,就像 close() 阻塞一样,直到操作完成。close() 操作本身不需要阻塞等待此类 I/O 完成。是否取消任何 I/O 操作,以及在 close() 时可以取消哪些 I/O 操作,是实现定义的。

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

所以,它是未指定的;要么取消未完成的操作,要么操作阻塞直到它们完成。

于 2013-06-04T03:08:19.647 回答