c程序:为什么remove()删除没有写权限的文件?

我已经使用了GNU / Linux 10多年了,所以我认为自己对文件权限非常熟悉。

为了testing下面的代码,我在'undo_path'上使用了'chmod -w'。 然后我通过使用ls -al来validation文件没有写权限。 这显示了:

-r – r – 1 andy andy 52 Sep 26 18:17 lastrmw

然后我尝试了代码。 两次。 这两次remove()语句都成功了。

if (remove (undo_path)) { fprintf (stderr, "Warning: failed to remove %s\n", undo_path); perror (__func__); } 

如何删除没有写入权限的文件?

我使用的是Debian 8 / Jessie,而我的内核是:linux oceanus 3.16.0-4-amd64#1 SMP Debian 3.16.36-1 + deb8u1(2016-09-03)x86_64 GNU / Linux

remove函数是从目录中删除条目的操作。 它不会删除文件,除非碰巧产生文件系统自动删除文件的条件。 例如,如果同一个文件有两个相应的目录条目或者被一个进程打开,则不会被删除。

remove()在目录上工作,所以只有当你没有对文件夹的写权限时才能工作。

删除文件意味着删除一个目录条目 。 删除(以及创建)目录项会影响磁盘上的包含目录的块,而被删除的文件使用的块不受影响。 事实上,当有多个文件引用(硬链接)时,文件块甚至可能不会被释放。 所以它包含了被检查的目录的写权限,而不是文件的权限。