file lock 에 대해 질문 드립니다.
글쓴이: poplinux / 작성시간: 목, 2007/10/11 - 5:14오후
다음과 같이 소스를 작성했습니다.
int main(int argc, char *argv[]) { int ret; int lockFD; (void) unlink("/tmp/lck.test"); FD = open("/tmp/lck.test", O_RDWR | O_CREAT | O_EXCL, 0444); if(FD == -1){ printf("get lock fail\n"); return -1; }else{ printf("get lock success\n"); } sleep(5); (void) unlink("/tmp/lck.test"); (void) fclose(FD); return 0; }
위와 같이 소스를 작성하고 다음과 같이 실행시켰습니다.
./lckTest & lckTest & lckTest & lckTest & lckTest &
위와 같이 실행시켜면
get lock success get lock fail get lock fail get lock fail get lock fail
대략 위와 같이 나올거라 예상했습니다.
왜냐하면, unlink() 의 man 페이지를 보면 삭제하려면 파일을 사용중인 프로세스가 있으면 그 프로세스가 완료되기 전까지 안 지워진다 라는
문장이 있었기 때문입니다.
그런데 결과는 다음과 같이 나옵니다.
code]
get lock success
get lock success
get lock success
get lock success
get lock success
[/code]
로 나옵니다. 위 결과는 unlink() 함수 호출시 /tmp/lck.test 파일이 바로 지워졌기 때문이라 생각됩니다.
어떤 부분을 수정해야 할까요?
Forums:
윈도우와는 달리
윈도우와는 달리 다른 프로세스가 file을 open했더라도 삭제가
가능합니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
그냥, 지나가다가..
그냥, 지나가다가.. 저게 컴팔이 정상적으로 됐을리가.. ;;
lockFD? FD?
인용: 왜냐하면,
inode는 안지워집니다만 파일이름은 파일시스템에서 찾을수 없게됩니다.
fd를 모두 닫으면 그제서야 unlink된 inode가 파일시스템에서 지워집니다.
----
Do not feed troll!
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
댓글 달기