2014-05-16 35 views
0

Unix写系统调用替换(覆盖)字符。有没有办法将 个字符插入到unix文件中。我们希望在不复制文件的情况下实现此目的。使用Unix系统调用插入文本

在这种情况下,mmap能够拯救吗?

例如,文件中的内容修改前:

abcdef 
1234567 

修改后,文件中的内容:

abcdef 
:/"}{> 
1234567 
+0

您可以通过打开追加来“插入”结尾。或在中间通过使用lseek到该区域并重写所有数据过去的那一点(不要忘了在覆盖之前使用读取将其保存到缓冲区) – technosaurus

回答

4

没有,“插入”的想法数据是提出了一个门面由文本编辑。

如果您有一个文本文件,并且想要将数据“插入”到文件中,则必须读取数据,对其进行修改并将其写回新文件。

+0

非常感谢Andy – user3645376

0

简短答案是'否' - 手册第2节中的系统调用不支持此操作。在一个平面的unix文件中,在插入数据之后,您将不得不重写文件中的所有内容。 mmap不会解决这个问题,除非你通过写mmap()编辑内存缓冲区并让O/S处理I/O来完成。

如果您需要高效地执行此操作,则需要某种类型的块结构。链表是这种结构的一个简单例子。如果您需要随机访问,则必须在其上覆盖树形结构。这大致是ISAM类型文件结构的工作原理。

在O/S中伪装此功能将需要您在文件系统元数据中实现类似的功能。这会将您的问题升级到自定义文件系统并使用内核进行绑定,这将花费大量精力,并且会使您的系统与其他人无法兼容。