我有一個調用mkstemp()的程序,用fd返回一些東西,然後關閉fd。我希望文件保留,直到我自己刪除它!用像rm命令之類的東西,或者其他的東西。我的問題是:Linux會在關閉(fd)後刪除這個文件嗎?當用mkstemp()創建的文件被刪除時?
2
A
回答
0
沒有,當tmpfile()
創建一個文件,它的目錄項(在臨時目錄)的創建後取出,所以只有通過open
引用的文件描述符導致文件inode(在/proc/<pid>/fd
目錄);一旦你撥打close(fd)
,就沒有更多的參考文件。
使用mkstemp()
您必須在創建後立即手動使用unlink()
。
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>
相關問題
- 1. 無法在Mac OS X中刪除)由mkstemp(創建的文件
- 2. 當文件被刪除時ant重建
- 3. 獲取由mkstemp()創建的文件名
- 4. 當新的活動被創建時,Android Studio R文件被刪除?
- 5. inotify當文件被刪除並再次創建時停止監視文件
- 6. MacOS X:當應用程序被刪除時刪除plist文件
- 7. 當應用程序被刪除時刪除緩存文件ios
- 8. 當我創建一個臨時文件/目錄時,它何時會被刪除?
- 9. 刪除fopen成功創建的文件時權限被拒絕
- 10. 由resque worker創建的臨時文件不會被刪除
- 11. 刪除創建的臨時文件
- 12. 根據創建時間刪除文件
- 13. 當我在TFS中籤出文件時,創建/刪除了App_offline.htm
- 14. 使用openFileOutput方法創建的文件在應用更新時被刪除
- 15. .nuspec文件已被刪除,.nupkg文件已創建。爲什麼?
- 16. 被忽略的GIT文件在刪除時被刪除
- 17. 當文件被刪除時,文件句柄會發生什麼?
- 18. performSelectorOnMainThread當文件被刪除IOS
- 19. Activemq - 當BlobMessage被使用時爲什麼不刪除文件?
- 20. 爲何* .pyc文件在關聯的* .py文件被刪除時被刪除
- 21. 當我嘗試刪除郵件後刪除文件時,Acess被拒絕
- 22. 使用C++創建/刪除文件夾
- 23. 文件用Matlab創建無法刪除
- 24. 當創建新的CMFCDesktopAlertWnd時,分配的內存何時被刪除?
- 25. 當S3文件被刪除時Flushing CloudFront的緩存
- 26. 當創建tar文件時,整個路徑被創建爲tar文件
- 27. inotifywait報告要創建的文件在創建之前被刪除
- 28. MySQL - 當表被刪除時,索引是否被刪除?
- 29. 當Observer被刪除時,NSNotification Observer Closure不會被刪除?
- 30. php創建無法刪除的文件
這就是我想,但這裏沒有發生。而且,我發誓,我的操作系統是可以的。我在當前目錄中創建文件,而不是/ tmp。 – matheuscscp
這個答案是錯誤的,mkstemp不會從文件系統中刪除文件。 – nos
@nos你說得對,我看了一下錯誤的方法,並採取了錯誤的推論。 – gengisdave