4

writeバッファ全体を書き込んでいなくても(シグナルによって中断された場合)、POSIX関数が正常に戻ることができることを私は知っています。短い書き込みを確認して再開する必要があります。

しかしaio_write、同じ問題がありますか?ないと思いますが、ドキュメントには記載されておらず、発生しないと述べているものは何も見つかりません。

4

2 に答える 2

1

短い答え

エラーの場合を除く:実用的はい、理論的である必要はありません。

長い答え

aio_write()私の経験から、呼び出し元は、を使用してバッファ全体を書き込むために2回以上呼び出す必要はありませんaoi_write()

ただし、これは、渡されたバッファ全体が実際に書き込まれることを保証するものではありません。の最後の呼び出しは、非同期I / O操作全体aio_error()の結果を示します。これは、エラーを示している可能性があります。

とにかく、ドキュメントは、への最後の呼び出しが、への元の呼び出しで指定された書き込みバイト数よりも少ない値を返す場合を明示的に除外していません。実際には、バッファ全体が送信されなかったと解釈する必要があります。その場合、前の呼び出しで書き込むために残されたものとして示されているものを渡して、再度呼び出す必要があります。aio_return()aio_write()aio_write()

于 2013-03-04T17:47:48.093 に答える
1

このページのエラーコードのリストには、が含まれていません。これは、 「さらに作業を行うためにもう一度電話してください」という意味EINTRの値です。したがって、同じデータを書き込むために再度errno呼び出す必要はありません。aio_write

これは、すべての書き込みが完了したことを信頼できるという意味ではありません。たとえば、ディスクがいっぱいであるなどの理由で、部分的な書き込みを取得することもできます。EINTRただし、確認して「再試行」する必要はありません。

于 2013-03-04T16:57:14.503 に答える