什么会导致罕见的lchown()故障:不允许操作 我在大多数运行中都有C++代码的测试,但是在一些罕见的情况下,由于在我的测试应用程序中调用LCHOWONE()的失败,errno EPERM和StruRe: Operation not permitted.

什么会导致罕见的lchown()故障:不允许操作 我在大多数运行中都有C++代码的测试,但是在一些罕见的情况下,由于在我的测试应用程序中调用LCHOWONE()的失败,errno EPERM和StruRe: Operation not permitted.,c++,symlink,nfs,C++,Symlink,Nfs,我的应用程序中有问题的代码如下所示: ::lchown("pathnameToFile", uid_t(500), static_cast<unsigned>(-1)); // This line works ::lchown("pathnameToFile", static_cast<unsigned>(-1), gid_t(500)); // This fails rarely 我想这两件事是相关的。这是在32位Centos 4机器上运行的 “pathnameToF

我的应用程序中有问题的代码如下所示:

::lchown("pathnameToFile", uid_t(500), static_cast<unsigned>(-1)); // This line works
::lchown("pathnameToFile", static_cast<unsigned>(-1), gid_t(500)); // This fails rarely
我想这两件事是相关的。这是在32位Centos 4机器上运行的

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

然而,经过一段时间后,符号链接出现了,尽管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是“me”的主要组,另一组是“wheel”

> groups
me wheel

这是一个竞赛条件,当lchown失败时添加一个短睡眠,然后重试。

这是一个竞赛条件,当lchown失败时,请添加一个短睡眠,然后重试。

链接所在目录的权限和所有权是什么?在用户的补充组列表中是
gid 500
?@samold不确定我是否回答了您的问题?是-似乎是您的代码和NFS之间的竞争条件。我猜想,当您说“symlink返回0,但失败”时,您的意思是说您的测试代码无法验证链接的存在。对我来说,这意味着NFS尚未赶上对其数据结构进行更改的步伐,而lchown随后将失败。我不确定这是否是你想要的答案。希望能有所帮助。是的,开始时符号链接似乎不见了,打电话给lchown()EPERM失败。链接所在目录的权限和所有权是什么?在用户的补充组列表中是
gid 500
?@samold不确定我是否回答了您的问题?是-似乎是您的代码和NFS之间的竞争条件。我猜想,当您说“symlink返回0,但失败”时,您的意思是说您的测试代码无法验证链接的存在。对我来说,这意味着NFS尚未赶上对其数据结构进行更改的步伐,而lchown随后将失败。我不确定这是否是你想要的答案。希望能有所帮助。是的,符号链接一开始似乎丢失了,使用EPERM调用lchown()失败。
> groups
me wheel