2012-06-23 177 views
1

我对大多数运行过程中的C++代码进行了测试,但在某些罕见情况下由于在我的应用程序中调用lchown()失败而失败,失败与错误号EPERM和字符串错误:什么会导致罕见的lchown()失败:不允许操作

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”也无法在我的应用程序中创建它,但代码没有t检测到任何错误(以下返回0):

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

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

NFS安装的分区上存在“pathnameToFile”。在创建的文件和链接之间是否会有某种竞争条件,并且由于NFS没有反映它的存在,lchown失败?

然而,经过一段时间之后,出现了符号链接,尽管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 
+0

链接所在目录的权限和所有权是什么? – wallyk

+0

在用户的补充组列表中是否有'gid 500'? – sarnold

+0

@samold不知道我是否回答你的问题? – WilliamKF

回答

1

这是一种竞赛状态,当lchown失败并且再次尝试时添加一个短暂的睡眠。

相关问题