2013-04-23 4 views
9

자,이 문제는 이상한 것처럼 보일 수 있습니다, 그것은 아마도,하지만, 내가 저자는 흥미로운 예를 제공하는 I-노드에 대해 배울 this을 읽어 봤는데 어떤 컨텍스트를 제공하기 위해 :열린 파일 설명자에서 파일을 다시 만들 수 있습니까?

{ 
    FILE *fp; 

    fp = fopen("some.hidden.file","w"); 
    unlink("some.hidden.file"); /* deletes the filename part */ 

    /* some.hidden.file no longer has a filename and is truly hidden */ 
    fprintf(fp,"This data won't be found\n"); /* access the data part */ 
    /*etc*/ 
    fclose(fp); /* finally release the data part */ 
} 

이를 "숨겨진"임시 파일을 만들 수 있습니다.

내 질문은 여기에있는 : 아이 노드를 가리키는 이름unlink() 호출 후 fp열 개최를 재현 할 수있는 방법이있다?

면책 조항 : 본인은 실제 코드에서이를 수행하지 않습니다. 나는 i-node에 대해 배우는 것만으로도 가능하며 이것이 가능한지 궁금해합니다.

+1

AFAIK, 열린 파일 설명 자에 이름을 제공 할 방법이 없습니다. –

+0

[맨 페이지] (http://linux.die.net/man/2/unlink)에서 : "이름이 파일의 마지막 링크이지만 어떤 프로세스가 여전히 파일을 열었 으면 파일은 계속 존재합니다. 그것을 가리키는 마지막 파일 기술자는 닫혀있다. " –

+0

@ BartFriederichs : 물론, 내가 준 링크에서 설명 된 것입니다. 하지만 실제로 내 질문에 답하지 않습니다. "파일이 파괴되기 전에 현재 열리는"i- 노드 "를 가리키는 파일을 다시 만드는 방법이 있습니까? – ereOn

답변

2

link 시스템 호출에 UNIX 파일 설명자가 아닌 유효한 파일 이름 (즉, 기존 링크)이 필요하기 때문에 가능하지 않습니다. the Single UNIX Specification에는 flink 기능이 없습니다.

+0

그래,하지만 i-node를 다루는 다른 저수준 함수가있을 수있다. 난 그냥 어디서 봐야할지 모르겠다;) – ereOn

+0

당신은 매우 OS에 특정적일 것이다. 내가 말하기를, 내가 인터넷 검색을한다고 나는 말하고 싶다. http://www.win.tue.nl/~aeb/linux/lk /lk-8.html (프리스트 히트, 조금 더 보길 원할 것입니다, 나는 '커널 inode 처리'를 봤습니다). –