C 使用Unix系统调用插入文本

C 使用Unix系统调用插入文本,c,unix,file-io,C,Unix,File Io,Unix写系统调用替换(覆盖)字符。有没有插入的方法 将字符转换为unix文件。我们希望在不复制文件的情况下实现这一点 在这种情况下,mmap能来救援吗 例如,修改前文件A的内容: abcdef 1234567 修改后,文件A的内容: abcdef :/"}{> 1234567 不,“插入”数据的想法是由文本编辑器提出的 如果您有一个文本文件,并且希望将数据“插入”到该文件中,则必须读取数据,对其进行修改,然后将其写回新文件。不,“插入”数据的想法是由文本编辑器提出的 如果您有一个文本

Unix写系统调用替换(覆盖)字符。有没有插入的方法 将字符转换为unix文件。我们希望在不复制文件的情况下实现这一点

在这种情况下,mmap能来救援吗

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

abcdef
1234567
修改后,文件A的内容:

abcdef
:/"}{>
1234567
不,“插入”数据的想法是由文本编辑器提出的

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

不,“插入”数据的想法是由文本编辑器提出的


如果您有一个文本文件,并且希望将数据“插入”到该文件中,则必须读取数据、修改数据并将其写回新文件。

简短的回答是“否”-本手册第2节中的系统调用不支持这一点。在平面unix文件中,插入数据后必须重新写入文件中的所有内容。mmap无法解决这个问题,除非您将其写入mmap()ed内存缓冲区并让O/S处理I/O

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


在O/S中伪造此功能需要在文件系统元数据中实现类似的功能。这会将您的问题升级到自定义文件系统和内核,这将是一项艰巨的工作,并且会使您的系统与其他系统不兼容。

简短的回答是“否”-本手册第2节中的系统调用不支持这一点。在平面unix文件中,插入数据后必须重新写入文件中的所有内容。mmap无法解决这个问题,除非您将其写入mmap()ed内存缓冲区并让O/S处理I/O

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

在O/S中伪造此功能需要在文件系统元数据中实现类似的功能。这会将您的问题升级到自定义文件系统和内核,这将是一项艰巨的工作,并且会使您的系统与其他系统不兼容。

您可以通过打开以进行附加,在最后“插入”。或者在中间使用LSETK到该区域并重写过去的所有数据(不要忘记在重写之前使用Read将其保存到缓冲区)。或者在中间使用LSETK到该区域并重写过去的所有数据(不要忘记在重写之前使用Read将其保存到缓冲区)