2016-12-17 18 views
2

一時ファイルを作成しようとしていますが、たくさんのものを書きたいと思っています。しかし、lsofの診断後には、一時ファイルが開いた直後に一時ファイルが削除されたように見えます。次のスニペットを取る:私は、ps auxを行う私のプロセスのpidを取得し、その後lsof -p <pid>を行う行けばC:開いた直後に一時ファイルが削除されました

FILE *tmp; 

int main(int argc, char *argv[]) { 

    if ((tmp = tmpfile()) == NULL) 
     err_sys("tmpfile error"); 

    sleep(60); 

は今、私は以下を参照してください。

10.06 1159 daniel 3u REG 0,1  0 10696049115128289 /tmp/tmpfCrM7Jn (deleted) 

これは少しあります私の頭を傷つける人。実際に呼び出されたときにエラーを引き起こしていない関数呼び出しは1つだけであることを考慮すると、問題の内容がわかりません。

+2

:* – user3386109

+0

*そして、「*それへの最後の参照がある「作成されたファイルは、それへの最後の参照が閉じているときに、ファイルが自動的に に削除され、TMPFILE()が復帰する前に リンク解除です」 'fclose(tmp);'が呼び出されたときに "*を閉じました"。 – alk

+1

私はまだそれを読み書きすることができます。リンクを解除するということは、inodeを指すパスが削除されたことを意味します。現在のファイルハンドル 'FILE * tmp'は、@alkが述べたように、' fclose'を呼び出すか、プログラムが終了するまでは有効です。 –

答えて

3

manページから:

作成されたファイルは、それへの最後の参照が 閉じられたときに自動的に削除する ファイルを引き起こし、TMPFILE()が戻る前にリンクされていないです。

lsofの出力は、単にinodeを指すパスが削除されたことを示します。ただし、現在のファイルハンドルFILE *tmpは、ファイルが閉じられるか、プログラムが終了するまで有効である必要があります。 manページから

関連する問題