我基本上有以下代码:
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,则write只写入2147479552,留下4096未写入。为什么会发生这种情况,是否总是需要在循环中进行write操作?
write
来解决这个问题,而不考虑SSIZE_MAX
的限制。write()
函数规范说明它没有义务写入整个缓冲区,即使它几乎总是这样做。问题中没有循环的代码是有问题的。 - Adam