2012-02-22 1 views
1

가끔씩은 파일 사용 권한이 있지만 regulaly가 아님 파일을 만들 때 int fd = open("\tmp\lockfile", O_CREAT | O_EXCL);을 사용하십시오.'l'비트 권한 (--- x - l ---) O/P

[email protected]> ll importer.lck 
---------- 1 user nms   0 Feb 22 10:58 importer.lck` 

내가 O_CREAT를 통해 파일을 만드는 알고 동안하지 - : 시간 O의 대부분은/P이 있지만 내가 ll \tmp\locfile을 수행 할 때 내가 드문 시나리오에서 얻는 O의/P를

[email protected]> ll lockfile 
---x--l--- 1 root  nms   0 Feb 21 10:40 lockfile 
[email protected]>` 

입니다 모드를 제공하면 위의 처럼 문제가 될 수 있습니다. 이 경우 : -

[email protected]> ll lockfile 
---x--l--- 1 root  nms   0 Feb 21 10:40 lockfile 
[email protected]> 

내가 만든 프로세스가 끝난 후에는 lockfile을 삭제할 수 없습니다. 위의 경우 chmod도 작동하지 않지만 chown이 작동하는 것 같습니다.

이러한 사용 권한을 사용하여 파일을 만들지 못하게하려면 어떻게해야합니까? ---x--l---은 그냥 지나가는 모드입니까? -

[email protected]:/tmp# umask 
0022 
[email protected]:/tmp#` 

답변

2

open()의 필수 세 번째 매개 변수 인 mode가 생략되었습니다. (이 매개 변수는 O_CREAT를 사용할 때 필요합니다). 스택에는 매개 변수가 없으므로 open은 무작위 값 (스택의 반환 주소)을 사용합니다.

1

artensay - 아니요, 영업 이익은 매우 잘못 필수 잠금 덤비는했다

http://www.tereknor.com/solaris/solfaq/faq174.html 

. 다른 게시물을 읽지 않았을 수 있습니다. 그러나 그 비트는 fcntl() 문과 같은 부수적 인 호출에서 왔으며 쓰레기 더미가 아닙니다. 네, 맞습니다. 공개 성명은 잘못되었습니다.

+0

artensay가 스택에서 가져 오는 것을 언급하는 것은 잘못되었을 수 있지만 근본 원인은 파일이 O_CREAT를 사용하여 작성된 방법이라고 생각합니다. 모드를 제공하는 것이 독점적으로 발생하지 않도록합니다. 무슨 말을하니? – Invictus