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

时间:2016-09-26 23:42:12

标签: c linux file-permissions chmod

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

为了测试以下代码,我使用了' chmod -w' on' undo_path'。然后我通过使用ls -al验证了该文件没有写入权限。它显示:

  

-r - 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 < / p>

3 个答案:

答案 0 :(得分:2)

remove()适用于目录,因此只有在您没有文件夹的写入权限而不是文件的情况下才能使用。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

删除文件意味着删除目录条目。删除(以及创建)目录条目会影响磁盘上包含目录的块,而删除文件所使用的块不会受到影响。实际上,如果有多个文件引用(硬链接),则可能无法释放文件块。因此,它包含已检查的目录的写入权限,而不是文件的