文件是Linux中的互斥体吗?如何实施?

文件是Linux中的互斥体吗?如何实施?,linux,filesystems,Linux,Filesystems,在windows中,如果我用MS Word打开一个文件,然后尝试删除它。 系统会阻止我的。它防止文件被删除 Linux中有类似的机制吗? 在编写自己的程序时如何实现它?Linux中没有类似的机制。一、 事实上,我发现窗户的这一特性是一个令人难以置信的缺陷,也是一个大问题 除非程序是一个数据库并在工作时更新文件,否则程序通常不会打开正在处理的文件。保存文档时,程序通常只打开文件、写入内容并关闭文件 vim的.swp文件会随着vim的工作而更新,并且vim会一直将其打开,因此即使您删除它,该文件也不

在windows中,如果我用MS Word打开一个文件,然后尝试删除它。 系统会阻止我的。它防止文件被删除

Linux中有类似的机制吗?
在编写自己的程序时如何实现它?

Linux中没有类似的机制。一、 事实上,我发现窗户的这一特性是一个令人难以置信的缺陷,也是一个大问题

除非程序是一个数据库并在工作时更新文件,否则程序通常不会打开正在处理的文件。保存文档时,程序通常只打开文件、写入内容并关闭文件

vim
.swp
文件会随着vim的工作而更新,并且vim会一直将其打开,因此即使您删除它,该文件也不会真正消失<如果在运行时删除
.swp
文件,则code>vim将失去其恢复功能


在Linux中,如果在进程打开文件时删除该文件,系统将保持该文件的存在,直到对该文件的所有引用都消失。文件系统中引用该文件的名称将消失。但是文件本身仍然在磁盘上

如果系统在文件仍处于打开状态时崩溃,则会在系统恢复时将其清理并从磁盘中删除


Windows中出现这种问题的原因是强制锁定经常会阻止应该成功的操作成功。例如,备份进程应该能够读取正在写入的文件。它不应该在备份进行之前停止正在进行写入的进程。在许多其他情况下,应该能够向前移动的操作由于愚蠢的原因而被阻止。

大多数Unix文件系统(如Linux的ext2 fs系列)的语义是,文件可以在任何时候
取消链接(2)
'd,即使它是打开的。但是,在这样一个调用之后,如果文件已经被其他进程打开,那么它们可以通过打开的文件描述符继续读写文件。在关闭所有打开的文件描述符之前,文件系统实际上不会释放存储空间。这些是由来已久的语义学


您可能希望阅读更多有关Unix和Linux(例如)中的文件锁定的信息。基本上,Linux上存在强制锁和建议锁,但它们不能保证阻止您想要阻止的内容。

请问您为什么要这样做?我只是好奇。我正在使用vim,发现我可以在另一个登录shell中删除我的文件。虽然vim有.swp来恢复它,但我想知道为什么vim和word使用不同的机制。我只能想象两种机制来实现这一点。在内存中读取整个文件一次(无法编辑大文件)或在另一个文件(.swp)中无法将整个文件读取到内存中对于当今的大多数编辑器来说并不是什么问题。除非你试图编辑一个数据库文件或磁盘映像文件或其他东西,否则你不太可能有一个太大而无法放入虚拟内存的文件。我鄙视它。这就是我使用Linux的原因,因为我可以用一个文件管理器来彻底破坏我的系统;)你能解释一下为什么这是个问题吗?我们如何避免其他用户/线程删除我的工作文件?在进行任何文件操作之前先检查一下?@Lai Yu Hsuan:我已经更新了我的答案。我的更新是否回答了您的问题?“但文件本身仍在磁盘上。”但如果我无法引用其inode,文件的存在是否毫无意义?我误解了您的说法。你已经回答了我的问题。顺便说一句,如果打开一个文件并没有锁定它,为什么我们总是要关闭它?只是个会议?