我知道write
即使没有写入整个缓冲区(如果被信号中断),POSIX 函数也可以成功返回。您必须检查短写并恢复它们。
但是aio_write
有同样的问题吗?我不认为它会发生,但文档中没有提到它,我找不到任何说明它不会发生的东西。
简短的回答
排除任何错误情况:实际是的,理论上不一定。
长答案
根据我的经验,调用者不需要aio_write()
多次调用就可以使用aoi_write()
.
然而,这并不能保证传入的整个缓冲区确实会被写入。最后的调用aio_error()
给出了整个异步 I/O 操作的结果,这可能表示错误。
无论如何,文档没有明确排除最终调用aio_return()
返回的值小于原始调用中指定的要写出的字节数的情况aio_write()
,确实需要将其解释为不会发送整个缓冲区,在这种情况下,有必要aio_write()
再次调用,传入前一次调用留下的要写入的内容。
此页面上的错误代码列表不包括EINTR
,这是errno
表示“请再次调用以完成更多工作”的值。因此,不,您不需要aio_write
再次调用要写入的同一条数据。
这并不意味着您可以依赖每次写入完成。例如,由于磁盘已满或类似情况,您仍然可以进行部分写入。但是您不需要检查EINTR
并“重试”。