就地编辑文件

In-place editing a file

我正在编写一个程序来就地更改文件。我想要的语义是旧版本应该保留在文件系统上,直到新版本被写入。也就是说,从旧版本到新版本之间的转换应该自动发生。在 Linux 或最好在任何 POSIX 系统上执行此操作的正确方法是什么?

以不同的名称写入新文件,然后调用 rename

以原子方式执行此操作的规范方法是创建一个临时文件,完成后,将其移动以覆盖原始文件。然后你进入了一个完全不同的问题领域。看看这个Is rename() without fsync() safe?

I am writing a program to change a file in place

已经存在的程序是patch

运行 diff -[option] old-file new-file >> name.patch

例如diff -Naur old-file new-file >> name.patch

... 并使用 patch 命令编辑文件,如 patch -p0 < name.patch