我基本上有以下代码:
int fileWrite(int file, void * pBuffer, size_t size)
{
size_t bytesWritten = (size_t)write( file, pBuffer, size ) ;
if (bytesWritten != size)
{
return -1;
}
return 0;
}
如果大小为1GB,则可以使用,但是当大小为〜2GB时,则可以连续保留4K字节。我可以通过将写操作包装在循环中并向上移动缓冲区来解决此问题,但是我很好奇为什么它总是失败。
例如,如果大小为2147483648,则只写2147479552,而使4096不写。为什么会发生这种情况,并且总是将写操作包装在循环中是否正确?
2
您是否以32位模式运行它?2gig是最大的32位数字。
—
Barmar
write
一次要消耗多少数据的规则取决于数据接收器的类型file
(例如“常规”文件,管道,流套接字,数据报套接字等)。你可以说得更详细点吗?
等一下,您要
—
a安
write
一次尝试整个文件吗?通常的方法是一次以缓冲区大小流式传输数据,直到您编写所有内容为止。
@Luaan如果你已经把所有我看不出有什么数据错一次,但因为这问题和答案写说明这一切,
—
管
write()
并没有写这一切(这也适用于小的缓冲区太)
无论有什么
—
亚当
SSIZE_MAX
限制,“我都可以通过将写操作包装在循环中来解决此问题” 。该write()
规范说,这是没有义务写的全缓冲,即使它几乎总是这样。问题中的无循环代码是一个错误。