Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C aio_写入总是写入整个缓冲区吗?_C_Linux_Posix_Aio - Fatal编程技术网

C aio_写入总是写入整个缓冲区吗?

C aio_写入总是写入整个缓冲区吗?,c,linux,posix,aio,C,Linux,Posix,Aio,我知道POSIXwrite函数可以成功返回,即使它没有写入整个缓冲区(如果被信号中断)。你必须检查短写并恢复它们 但是aio_write是否也有同样的问题?我认为没有,但文档中没有提到,我也找不到任何说明它没有发生的信息。页面上的错误代码列表不包括EINTR,这是errno中的值,表示“请再次打电话做更多的工作”。因此,不需要再次调用aio_write来写入同一段数据 这并不意味着你可以依赖于每一次写作的完成。例如,由于磁盘已满或类似情况,您仍然可以进行部分写入。但您不需要检查EINTR和“重试

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


但是
aio_write
是否也有同样的问题?我认为没有,但文档中没有提到,我也找不到任何说明它没有发生的信息。

页面上的错误代码列表不包括
EINTR
,这是
errno
中的值,表示“请再次打电话做更多的工作”。因此,不需要再次调用
aio_write
来写入同一段数据


这并不意味着你可以依赖于每一次写作的完成。例如,由于磁盘已满或类似情况,您仍然可以进行部分写入。但您不需要检查
EINTR
和“重试”

简短回答

排除任何错误情况:是的,理论上不一定

长答案

根据我的经验,调用方不需要多次调用
aio\u write()
就可以使用
aoi\u write()
写入整个缓冲区

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


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

说是这样。@chrisaycock,没错,但它也说他从未实际使用过aio_*,因此他可能会出错。调用方不需要调用
aio_write()
多次将整个缓冲区传递到
aoi\u write()
。但是,这并不能保证传入的整个缓冲区都会被写入。最后一次调用
aio_error()
将给出整个异步I/O操作的结果。“此页面”是否应该是一个链接?另外,
write
仅在写入任何数据之前信号中断时返回
EINTR
。否则,它返回成功,但返回的字节数小于请求的字节数。修复了链接[我的浏览器决定重新启动,所以我在做的事情中有点“迷失”——可能应该尝试其他浏览器,但FF通常非常好]。@MatstPeterson:请不要链接到死亡页面。这是一个过时的、非官方信息的庞大来源,也充满了广告。由于SEO(通常有助于提高其搜索评级),很多人都会在谷歌搜索结果中首先看到它。