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
链接所在目录的权限和所有权是什么? – wallyk
在用户的补充组列表中是否有'gid 500'? – sarnold
@samold不知道我是否回答你的问题? – WilliamKF