我基本上有以下代码:
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()规范说,这是没有义务写的全缓冲,即使它几乎总是这样。问题中的无循环代码是一个错误。