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 に答える