我基本上有以下代码:
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不写。为什么会发生这种情况,并且总是将写操作包装在循环中是否正确?
您可以在man 2 write
:-)中找到答案。我也会仔细检查我的代码...
如果此数目小于请求的字节数,这不是错误;例如,由于磁盘设备已装满,可能会发生这种情况。
并从write()手册页描述中:
ssize_t write(int fd, const void *buf, size_t count);
根据POSIX.1,如果count大于SSIZE_MAX,则结果是实现定义的;有关Linux上的上限,请参见注释。
笔记
在Linux上,write()(和类似的系统调用)将最多传输0x7ffff000(2,147,479,552)字节,并返回实际传输的字节数。(在32位和64位
系统上都是如此。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句