2016-08-14 52 views
0

我在linux mint中使用链接命令时遇到问题。
我做了文件1,并添加一个新的硬链接到该文件:使用与凯特编辑器的硬链接

link file1 file2 

我知道当我改变文件1的内容,文件2应该随之改变。
当我用vim编辑file1或者用重定向向它添加文本时效果很好,但是当我用kate编辑器编辑file1时,就好像编辑器打破了file2的链接!之后当
我用kate或vim更改file1的内容,...文件2不会再变化。
有什么问题?

+1

'kate'很可能在'file1'的副本上工作,而不是打开'file1'并将副本的内容写入它,只是执行相当于'mv tmp file1'。 – chepner

回答

1

不同的程序保存在不同的方式的文件。至少有两个浮现在脑海中:

  • 打开现有文件并覆盖其内容
  • 创建临时文件,写入新的内容出现,然后以某种方式与新的替换原来的文件(删除旧文件并重新命名新的;或重命名旧文件,重命名新的文件,然后删除旧文件;或者使用系统函数来交换文件的内容(实际上,文件的交换名称),然后删除旧文件;或...)

从来看它目前的源代码,凯特正在使用后一种方法(尽管使用QSaveFile,尽管如此,仍有direct write fallback)。为什么?通常,为了使文件保存或多或少是原子的,并且还要确保保存不会导致由例如缺少可用空间(尽管这也意味着它在保存时使用新旧文件大小总和的空间)。

1

我是凯特开发者之一。问题如下:每当Kate保存时,它都会通过保存到同一文件夹中的临时文件中,并在成功时移动到所需的位置。

此移动操作正是破坏您的硬链接:首先,硬链接被删除,然后临时文件被重命名。

虽然这可以避免数据丢失,但它也会遇到自己的问题。我们在这里跟踪这个错误:

,此外,QSaveFile还有另外两个问题,一个文件时文件,跟踪在这里:

解决方案是直接在所有这些角落案例中写,然后我们可以避免这种麻烦,以牺牲在系统崩溃情况下丢失数据为代价,所以这是一种折衷。为了解决这个问题,我们需要修补Qt,目前还没有人做到这一点。