你什么时候有权使用unlink()?

时间:2012-04-18 07:00:21

标签: c++ c unix posix unlink

我试图使用unlink()来预测哪些文件可以删除。

到目前为止,我的理解是该文件必须可写入其他人,或者与执行程序具有相同的组ID或所有者ID。

还有其他案件吗?我试图解释我的程序如何删除这些文件(该程序不是以root用户身份运行,也不是以admin用户身份运行)。

drwxrwxr-x  4 root  admin    136 Apr 17 23:53 .
drwxrwxr-x  7 root  admin    238 Jan 27 11:49 ..
-rwxrwxr-x  1 root  admin    560 Jan 27 11:49 info.nib
-rwxrwxr-x  1 root  admin  18399 Jan 27 11:49 keyedobjects.nib

谢谢!

4 个答案:

答案 0 :(得分:3)

实际上,重要的是目录的权限!

答案 1 :(得分:1)

还有一种情况是,另一个进程仍然有要删除的文件,打开了。来自unlink

的手册页

EBUSY

  

文件路径名无法取消链接,因为正在使用它   系统或其他过程;例如,它是一个挂载点或   NFS客户端软件创建它以表示活动但是否则   无名的inode(“NFS傻瓜重命名”)。

另请注意,进程的有效UID应具有对包含要取消链接的文件路径的目录的写访问权。

答案 2 :(得分:1)

正如其他人所提到的,目录必须是有效用户可写的。但是,该文件可以具有应用于它的扩展权限(ACL),以防止其被删除。从你展示的例子中,我认为你正在使用Mac OS,对吧?在那里,您可以使用ls -le来显示ACL。 chmod(1) manpage会告诉您各种权限。如果要在程序中查询ACL,则应该首先阅读acl(3) manpage

答案 3 :(得分:0)

它所在的目录应该有+w