2015-09-07 48 views
2

我有一個調用mkstemp()的程序,用fd返回一些東西,然後關閉fd。我希望文件保留,直到我自己刪除它!用像rm命令之類的東西,或者其他的東西。我的問題是:Linux會在關閉(fd)後刪除這個文件嗎?當用mkstemp()創建的文件被刪除時?

回答

0

沒有,當tmpfile()創建一個文件,它的目錄項(在臨時目錄)的創建後取出,所以只有通過open引用的文件描述符導致文件inode(在/proc/<pid>/fd目錄);一旦你撥打close(fd),就沒有更多的參考文件。

使用mkstemp()您必須在創建後立即手動使用unlink()

+0

這就是我想,但這裏沒有發生。而且,我發誓,我的操作系統是可以的。我在當前目錄中創建文件,而不是/ tmp。 – matheuscscp

+0

這個答案是錯誤的,mkstemp不會從文件系統中刪除文件。 – nos

+0

@nos你說得對,我看了一下錯誤的方法,並採取了錯誤的推論。 – gengisdave

0

將Linux在關閉(fd)後刪除此文件?

不自動。您需要手動調用文件unlink。如果您不需要按名稱(即通過文件系統)訪問該文件,則可以在撥打mkstemp後立即執行此操作 - 一旦描述符關閉,它就會被刪除。

或者,如果您需要通過名稱將文件傳遞到代碼(或進程)的另一部分,請不要致電unlink

下面是一個例子的工作流程:

char filename[] = "tempfile-XXXXXX"; 
int fd; 
if ((fd = mkstemp(filename)) == -1) { 
    fprintf(stderr, "Failed with error %s\n", strerror(errno)); 
    return -1; 
} 

unlink(filename); 

FILE *fh = fdopen(fd, "w"); 
fprintf(fh, "It worked!\n"); 
fclose(fh); 

fclose關閉FILE*流,而且底層的文件描述符,所以我們並不需要顯式調用close(fd)

必要的標頭:

#include <errno.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
相關問題