Unix写系统调用替换(覆盖)字符。有没有办法将 个字符插入到unix文件中。我们希望在不复制文件的情况下实现此目的。使用Unix系统调用插入文本
在这种情况下,mmap能够拯救吗?
例如,文件中的内容修改前:
abcdef
1234567
修改后,文件中的内容:
abcdef
:/"}{>
1234567
Unix写系统调用替换(覆盖)字符。有没有办法将 个字符插入到unix文件中。我们希望在不复制文件的情况下实现此目的。使用Unix系统调用插入文本
在这种情况下,mmap能够拯救吗?
例如,文件中的内容修改前:
abcdef
1234567
修改后,文件中的内容:
abcdef
:/"}{>
1234567
没有,“插入”的想法数据是提出了一个门面由文本编辑。
如果您有一个文本文件,并且想要将数据“插入”到文件中,则必须读取数据,对其进行修改并将其写回新文件。
非常感谢Andy – user3645376
简短答案是'否' - 手册第2节中的系统调用不支持此操作。在一个平面的unix文件中,在插入数据之后,您将不得不重写文件中的所有内容。 mmap不会解决这个问题,除非你通过写mmap()编辑内存缓冲区并让O/S处理I/O来完成。
如果您需要高效地执行此操作,则需要某种类型的块结构。链表是这种结构的一个简单例子。如果您需要随机访问,则必须在其上覆盖树形结构。这大致是ISAM类型文件结构的工作原理。
在O/S中伪装此功能将需要您在文件系统元数据中实现类似的功能。这会将您的问题升级到自定义文件系统并使用内核进行绑定,这将花费大量精力,并且会使您的系统与其他人无法兼容。
您可以通过打开追加来“插入”结尾。或在中间通过使用lseek到该区域并重写所有数据过去的那一点(不要忘了在覆盖之前使用读取将其保存到缓冲区) – technosaurus