리눅스에서는 파일을 열면 ref count가 하나씩 올라갑니다. 만약 ref count가 1 이상인 상황에서 unlink로 파일을 지우면, 더이상 open할 수는 없지만 이미 open되어있는 descriptor로는 평범하게 작업을 할 수 있습니다. 그러다가 close를 해서 ref count가 0이 되면 실제로 그 파일을 지우게 됩니다.
각종 에디터가 임시파일을 만들기 때문이 아니고 커널에서 파일 관리를 그렇게 합니다. APUE를 잘 읽어보시면 자세히 이해할 수 있습니다 :)
에러나지 않는게 당연한거 아닐까요touch /xvi /x-
에러나지 않는게 당연한거 아닐까요
touch /x
vi /x
-------------------
rm -rf /x
해도 지워지듯이..
힘내세요.
vi로 읽은 상태에서 rm으로 지워도 잘지워지는거 봐서 원
vi로 읽은 상태에서 rm으로 지워도
잘지워지는거 봐서
원래 지워지게 만들어 진것 같은데
그래도 파일을 읽고 있는 상태에서 지워지면 난감하잖아요..
뭔가 있을것 같기도 한데 찾아 봐도 없네요..
같은 프로세서 내에서 open으로 연것을 등록하고 close한것을 지우고 하는 곳을 만들어
unlink할때나 rename할때 그것을 보고 수행하는 방법밖에 없는지...
API단에서 체크하는것이 없을까요?
파일에 lock.
보통 file을 지운다거나 쓴다거나 할경우에는
배타적 lock을 걸고 작업을 하셔야 합니다.
lock을 거는 방법으로는 lockf 나 fcntl등을 이용할 수 있습니다.
moonzoo님께서 적어 주신 것을 가지고 좀 찼아봤습니다.h
moonzoo님께서 적어 주신 것을 가지고
좀 찼아봤습니다.
http://people.kldp.org/~kabin/doc/unixcfaq2.txt
http://www.ezdoum.com/upload/2/20020519002657/sys.txt
이곳에 자료가 있었네요.
그리고 APUE 원서에 Advanced I/O 368페이지에
fcntl로 라킹하는 법이 나오네요.
자료좀더 읽어보고 적용해 보겠습니다.
답변 감사드립니다.
[quote="초코리"]vi로 읽은 상태에서 rm으로 지워도 잘지
vi의 경우에 해당 파일이 열리는 것이 아니라 .swp 파일이 생겨서 그 파일을 에디팅합니다. 그럼 고운 하루. 시스템 콜을 따라가다 보니깐 나오더군요.
=========================
CharSyam ^^ --- 고운 하루
=========================
원래 파일을 오픈한 채로 지울 수 있습니다. 윈도우랑은 다른 점이지요.
원래 파일을 오픈한 채로 지울 수 있습니다. 윈도우랑은 다른 점이지요.
리눅스에서는 파일을 열면 ref count가 하나씩 올라갑니다. 만약 ref count가 1 이상인 상황에서 unlink로 파일을 지우면, 더이상 open할 수는 없지만 이미 open되어있는 descriptor로는 평범하게 작업을 할 수 있습니다. 그러다가 close를 해서 ref count가 0이 되면 실제로 그 파일을 지우게 됩니다.
각종 에디터가 임시파일을 만들기 때문이 아니고 커널에서 파일 관리를 그렇게 합니다. APUE를 잘 읽어보시면 자세히 이해할 수 있습니다 :)
일부로 임시파일을 다룰때 열고 unlink한 다음 작업하기도 합니다.
댓글 달기