什么会导致罕见的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