在通过两个活动缓冲区工作时Emacs,sum.cpp
而且template.cpp
,我不小心关闭了我的笔记本电脑(Ubuntu 15.04(Vivid Vervet)),而无需关闭 Emacs,也无需保存这两个文件。
当我重新启动笔记本电脑并通过 在 Emacs 中列出目录内容时C - x C - f /C++/
,我得到了以下内容。
.#sum.cpp 后面的行是什么意思?
lrwxrwxrwx 1 anupam anupam 41 Aug 6 00:53 .#sum.cpp -> [email protected]:1438790786
我知道 Emacs 通过 # by 保存了未保存的缓冲区autosave
,但是访问时#sum.cpp
为什么会显示以下内容?
文件是指向不存在的目标的符号链接吗?
答案1
自动保存的文件是#sum.cpp#
。符号链接 .#sum.cpp
Emacs 用它来存储一些内部数据(例如用户名、主机名和一些时间戳)
由于符号链接的目标只是一些短文本(如果您访问符号链接的内容,则将其解析为路径),因此符号链接有时用于存储少量数据。在这种情况下,目标很可能不是有效的文件路径,如果您尝试访问它,则会收到错误。
这是因为创建符号链接是一个原子操作:要么创建包含完整内容的符号链接,要么根本不创建。相比之下,创建常规文件并填充内容不是原子操作,如果发生错误,您最终可能会得到一个空文件或只有部分内容。
答案2
符号链接 - 符号链接 - 是包含目标文件相对于符号链接的位置的文本描述的文件。与硬链接相反,当您删除目标文件时,符号链接为空。
答案3
符号链接实际上只是一段简短的文本,当您打开它时,内核会发生特殊的“魔法”。程序可以将任何想要的文本放入其中。创建符号链接时,该文本是否是有效的路径名并不重要。只有当您尝试打开符号链接时,目标的存在才重要。
Emacs 的使用方式略有不同。它创建一个符号链接来指示文件已打开且有未保存的更改。如果您启动另一个 emacs 实例,它会警告您上一个实例已打开该文件。
使用符号链接而不是其他方法的原因是,如果文件位于 NFS 上,符号链接也会起作用。这也是主机名出现在文本中的原因,这样 emacs 就会知道文件当前是在本机还是在另一台计算机上打开的。
我猜想如果你再次尝试使用 emacs 编辑该文件,它会注意到该文件应该由当前计算机上的 emacs 实例打开,但该 emacs 实例不再存在,因此它一定以某种方式死亡了。然后 emacs 可以安全地忽略符号链接,而不会给你警告。