您何时有权使用 unlink()
When do you have permission to use unlink()?
我试图使用 unlink() 预测我可以删除哪些文件。
到目前为止,我的理解是该文件必须可写入其他人,或者与执行程序具有相同的组 ID 或所有者 ID。
还有其他情况吗?我正在尝试解释我的程序如何删除这些文件(该程序既未以 root 身份运行,也不在管理员组中运行)。
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
谢谢!
实际上,重要的是目录的权限!
正如其他人所提到的,目录必须可由有效用户写入。但是,该文件可以应用扩展权限 (ACL),以防止其被删除。从您展示的示例来看,我认为您使用的是Mac OS,对吗?在那里,您可以使用ls -le
来显示 ACL。chmod(1) 手册页会告诉你各种权限。如果你想在程序中查询 ACL, 你应该从阅读 acl(3) 手册页开始。
另一种情况是另一个进程仍然打开了您要删除的文件。从unlink
的手册页
电子繁忙
无法取消链接文件路径名,因为它正由 系统或其他进程;例如,它是一个挂载点或 NFS 客户端软件创建它以表示活动但除此之外 无名索引节点("NFS 愚蠢地重命名")。
另请注意,进程的有效 UID 应该对包含要取消链接的文件路径的目录具有写入访问权限。
它所在的目录应该有+w
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 何时提供默认参数作为模板参数
- C++-明确何时以及如何调用析构函数
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 如果非动态变量被指针引用,何时超出范围?
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 何时定义QT_NO_CONTEXTMENU?
- 何时为派生类初始化 vptr?
- 如何知道何时调用删除以及何时调用 delete[] C++?
- 指针的 C++ 动态数组 - 何时需要使用它?
- 我应该在 C++ 中何时/为什么使用 STATIC?
- 变量的值何时可以在C++中意外更改?
- 调用方如何知道 VARIANT 中何时有十进制?
- 何时应在构造函数参数中使用 const C++?
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- async_write完成处理程序最早何时完成?
- 何时返回指针与返回对象的一般经验法则?
- 为什么我的编译器无法弄清楚这种转换,它何时存在?
- 您何时有权使用 unlink()