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