在C++中,如何在Linux上編寫一個函數來返回一個臨時文件名,然後我可以寫入該文件?如何在Linux平臺上使用C++編寫臨時文件?
文件名應儘可能唯一,以便使用相同功能的另一個進程不會得到相同的名稱。
在C++中,如何在Linux上編寫一個函數來返回一個臨時文件名,然後我可以寫入該文件?如何在Linux平臺上使用C++編寫臨時文件?
文件名應儘可能唯一,以便使用相同功能的另一個進程不會得到相同的名稱。
使用標準庫「mktemp」函數之一:mktemp/mkstemp/mkstemps/mkdtemp。
編輯:普通mktemp可能不安全 - mkstemp是首選。
你應該簡單地檢查你正在嘗試寫入的文件是否已經存在。 這是一個鎖定問題。 文件也有所有者,所以如果你正確地做了這件事,錯誤的過程將無法寫入它。
人TMPFILE
的TMPFILE()函數打開二進制 讀取/寫入一個唯一的臨時文件(W + B)模式。該文件將被自動當 被關閉或刪除程序terminates.ote
使用tmpnam(),或任何給你的名字將是脆弱的競爭條件。使用的東西爲此目的設計的,它返回一個句柄,如TMPFILE():
#include <stdio.h>
FILE *tmpfile(void);
mktemp的應該工作或者獲得足夠的可用庫之一生成UUID。
的GNU libc的手冊討論了各種可用選項及其注意事項:
http://www.gnu.org/s/libc/manual/html_node/Temporary-Files.html
長話短說,只有mkstemp()或TMPFILE()應使用,正如其他人提及。
這些返回一個已經打開的FILE句柄,它不與C++的IO流混合。例如,如果你需要使用std :: wofstream來寫入這個新文件呢? – Andrey 2012-01-20 01:38:36