gpt4 book ai didi

c++ - 什么会导致罕见的 lchown() 失败 : Operation not permitted

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:55 26 4
gpt4 key购买 nike

我有一个 C++ 代码的测试,在大多数运行中通过,但在极少数情况下由于在我的被测应用程序中调用 lchown() 而失败,失败并返回 errno EPERM 和 strerror:

Operation not permitted.

我的应用程序中有问题的代码是这样的:

::lchown("pathnameToFile", uid_t(500), static_cast<unsigned>(-1)); // This line works
::lchown("pathnameToFile", static_cast<unsigned>(-1), gid_t(500)); // This fails rarely

同样在失败的测试用例迭代中,先前尝试创建指向“pathnameToFile”的符号链接(symbolic link)也未能在我的应用程序中创建它,但代码未检测到任何错误(以下返回 0):

::symlink("pathnameToFile", "linkToPathname");

我想这两件事是相关的。这是在 32 位 Centos 4 机器上运行的。

“pathnameToFile”存在于 NFS 安装分区上。正在创建的文件和指向它的链接之间是否存在某种竞争条件,并且 lchown 失败是因为 NFS 尚未反射(reflect)它的存在?

然而,过了一段时间后,符号链接(symbolic link)出现了,尽管 chown 仍然没有效果。

“pathnameToFile”位于具有权限的目录中:

drwxrwxr-x   2 me me   4096 Jun 22 17:33 .
-rw-rw-r-- 1 me root 33 Jun 22 17:33 pathnameToFile
lrwxrwxrwx   1 me root    8 Jun 22 17:33 LinkToPathname -> pathnameToFile

gid 500 是“我”的主要组,另一个组是“轮子”。

> groups
me wheel

最佳答案

这是一个竞争条件,当 lchown 失败时添加一个短暂的 sleep ,然后重试。

关于c++ - 什么会导致罕见的 lchown() 失败 : Operation not permitted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11166236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com