二进制文件的C语言操作

二进制文件的C语言操作,c,file-io,C,File Io,我需要对二进制文件执行操作,例如在文件开头编辑一些字节,或者执行跳过“X乘以sizeof(int)区域”的写入操作。我对实际的代码片段不感兴趣,只是我应该使用什么函数,如果可能的话。这是fseek的工作吗?不要从内存中的文件加载任何数据,这一点很重要。是的,这是fseek()的作业。 在文件中间写入将覆盖现有数据。您需要按要添加的数量移动所有后续数据。是的,这是fseek()的作业。 在文件中间写入将覆盖现有数据。您需要按要添加的数量移动所有后续数据。您可以使用fseek(),但也可以查看mma

我需要对二进制文件执行操作,例如在文件开头编辑一些字节,或者执行跳过“X乘以sizeof(int)区域”的写入操作。我对实际的代码片段不感兴趣,只是我应该使用什么函数,如果可能的话。这是fseek的工作吗?不要从内存中的文件加载任何数据,这一点很重要。

是的,这是
fseek()的作业。


在文件中间写入将覆盖现有数据。您需要按要添加的数量移动所有后续数据。

是的,这是
fseek()的作业。

在文件中间写入将覆盖现有数据。您需要按要添加的数量移动所有后续数据。

您可以使用
fseek()
,但也可以查看
mmap()
。后者的优点是,您不必关心文件中的当前指针,它只是一个可以使用偏移量导航到的内存区域

但问题是:没有适用于Windows的
mmap()
。如果您想插入数据,它不是最佳选择。

您可以使用
fseek()
,但也可以查看
mmap()
。后者的优点是,您不必关心文件中的当前指针,它只是一个可以使用偏移量导航到的内存区域


但问题是:没有适用于Windows的
mmap()
。如果您想插入数据,它不是最佳选择。

没问题,这是一个linux应用程序,如果效率更高,我会很好地使用它,
mmap()
的优点是您不需要发出系统调用来读/写。但是,如果你想插入数据,正如@AdamZalcman正确地提到的那样,它并不适合。我找不到mmap()的文档页,请链接它好吗?它是否包含在标准库中?是的,它是标准的,如果您安装了手册页,
man mmap
应该为您提供手册页。网上也有很多教程。@andrei如果你担心性能,最好在你的机器上对这两个实现进行基准测试。没问题,这是一个linux应用程序,如果效率更高,我会很好地使用它,
mmap()
的优点是你不需要发出系统调用来读/写。但是,如果你想插入数据,正如@AdamZalcman正确地提到的那样,它并不适合。我找不到mmap()的文档页,请链接它好吗?它是否包含在标准库中?是的,它是标准的,如果您安装了手册页,
man mmap
应该为您提供手册页。网上也有很多教程。@安德列,如果你担心性能,最好在你的机器上实现两个基准。如果我在中间指定了一个偏移量,它只是重写。@安德列是的——如果你想改变一个文件的内容,您最好创建一个新文件,将所需内容写入其中,并在最后(以原子方式)重命名。这是一个常见的过程,但它充满了缺陷:谷歌找到了一个合适的解决方案。如果我在中间指定了一个偏移量,它只是重写“@安德列是的”。如果你想改变一个文件的内容,你最好创建一个新文件,你需要写的东西,并在最后重命名(原子)。这是一个常见的过程,但却充满了陷阱:谷歌需要找到一个合适的解决方案。