Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Linux上尝试写入()大于2 GB的文件时出错_C++_File_Posix_Mmap - Fatal编程技术网

C++ 在Linux上尝试写入()大于2 GB的文件时出错

C++ 在Linux上尝试写入()大于2 GB的文件时出错,c++,file,posix,mmap,C++,File,Posix,Mmap,我需要打开一个文件并通过mmap将其加载到共享内存中,但如果该文件尚不存在,我想打开它,向其写入一些(伪)数据,然后mmap它。我用C编写了下面的函数,但在编写过程中出现了一个错误(见下文)。(我知道mmap部分可能是错误的(数据分配了两次!),但是错误发生在这之前,所以它不应该对这个问题有任何影响) 有指针吗?我一直在读开放和写作文档,在网上寻找例子,但我似乎无法克服这个错误 从评论中获益后: RHEL 6、g++4.8上的输出: Creating file bench2_datafile.b

我需要打开一个文件并通过mmap将其加载到共享内存中,但如果该文件尚不存在,我想打开它,向其写入一些(伪)数据,然后mmap它。我用C编写了下面的函数,但在编写过程中出现了一个错误(见下文)。(我知道mmap部分可能是错误的(数据分配了两次!),但是错误发生在这之前,所以它不应该对这个问题有任何影响)

有指针吗?我一直在读开放和写作文档,在网上寻找例子,但我似乎无法克服这个错误

从评论中获益后:

RHEL 6、g++4.8上的输出:

Creating file bench2_datafile.bin
3 0x7f79048af000 2147483648
write: Success
Couldn't write 2147483648 bytes to file bench2_datafile.bin
Wrote 2147479552 bytes
2147479552实际上是ls中的文件大小


此外,它可以在1GB的Mac上运行,但在2GB的情况下,它就没有动力了。哦,好吧,我真正的目标是Linux,在我清除bug之前,在Mac上工作更方便:-)

许多平台使用32位值作为文件位置。此外,接口要求对值进行签名。这意味着,当您想要处理大于2GB的文件时,您可能会遇到麻烦

一些平台提供非标准函数来处理较大的文件


您需要查看平台文档,以了解要针对的平台的情况

为什么使用
open
而不是
fopen
?您可以使用
fopen(filepath,“r”)
测试文件是否存在,如果不存在,请使用
fopen(filepath,“w”)
对其进行写入,然后继续执行文件存在时的操作。如果在失败的系统调用和perror之间不调用其他函数,则可能会重置errno并获得无意义的错误打印输出。确保已启用大文件支持。@为什么要使用open而不是fopen?因为
mmap()
需要一个
int
类型的文件描述符,就像
open()
返回的那样。另外,
fopen()
/
fwrite()
缓冲区写入操作-在这种情况下不需要写入操作。什么操作系统?这是32位还是64位的可执行文件?@Frank From:在Linux上,write()(和类似的系统调用)最多传输0x7ffff000(2147479552)字节,返回实际传输的字节数。(32位和64位系统都是如此。)
Creating file bench2_datafile.bin
3 0x101441000 2147483648
Couldn't write 2147483648 bytes to file bench2_datafile.bin
Wrote -1 bytes
write: Invalid argument
Creating file bench2_datafile.bin
3 0x7f79048af000 2147483648
write: Success
Couldn't write 2147483648 bytes to file bench2_datafile.bin
Wrote 2147479552 bytes