aio_write总是写入整个缓冲区吗?

时间:2013-03-04 16:46:32

标签: c linux posix aio

我知道POSIX write函数可以成功返回,即使它没有写入整个缓冲区(如果被信号中断)。你必须检查短写并恢复它们。

aio_write有同样的问题吗?我不认为它确实存在,但文档中没有提到它,我找不到任何表明它不会发生的事情。

2 个答案:

答案 0 :(得分:1)

this页面上的错误代码列表不包含EINTRerrno中的值表示“请再次致电再做一些工作”。因此,不需要再次调用aio_write来写入相同的数据。

这并不意味着您可以依赖每个完成的写入。例如,你仍然可以获得部分写入,因为磁盘已满或者有一些这样。但您无需检查EINTR和“再试一次”。

答案 1 :(得分:1)

简短回答

排除任何错误:实际是,理论上不一定。

答案很长

根据我的经验,调用者不需要再调用aio_write()一次,而是使用aoi_write()编写整个缓冲区。

然而,这并不能保证传入的整个缓冲区真的会被写入。对aio_error()的最终调用会给出整个异步I / O操作的结果,这可能表示错误。

无论如何,文档没有明确排除案例最后调用aio_return()返回一个值小于写出指定的字节数对aio_write()的原始调用,确实需要解释为不会发送整个缓冲区,在这种情况下,有必要再次调用aio_write()传递已指示的内容被上一次电话留下来写的。