2012-06-23 4 views
1

대부분의 실행에서 통과하지만 일부 드문 경우에서 테스트중인 응용 프로그램에서 lchown() 호출로 인해 실패한 C++ 코드 테스트가 있습니다. 의 errno EPERM과 함수 strerror과 :드문 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"도 내 응용 프로그램에서이 파일을 만들지 못했지만 코드는 아무 것도하지 않았습니다. 어떤 오류라도 감지하면 (다음은 0을 반환) :

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

이 두 가지가 관련되어 있다고 상상해보십시오. 32 비트 Centos 4 시스템에서 실행 중입니다.

"pathnameToFile"은 NFS 마운트 파티션에 있습니다. 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이 실패 할 때 잠을 자고 다시 시도하십시오.

관련 문제