我基本上有以下代码:
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字节。我可以通过将write封装在循环中并向上移动缓冲区来解决这个问题,但我很好奇为什么它总是失败。
例如,如果大小为2147483648,则只写2147479552,而不写4096。为什么会发生这种情况?总是将写包装在循环中是否正确?
您可以在man 2 write
:中找到答案
如果此数字小于字节数,则不是错误请求;这可能是因为磁盘设备已填充。
并且来自write()
手册页描述:
ssize_t write(int fd, const void *buf, size_t count);
根据POSIX.1,如果
count
大于SSIZE_MAX
,则结果是实施定义的;有关Linux上的上限,请参阅NOTES。注意事项
在Linux上,
write()
(以及类似的系统调用(最多将传输0x7ffff000
(2147479552(字节,返回字节数实际转移。(32位和64位都是如此系统。(