天天看點

Linux操作臨時檔案

使用臨時檔案要考慮幾個問題:

保證臨時檔案間的檔案名不互助沖突。

保證臨時檔案中内容不被其他使用者或者黑客偷看、删除和修改。

linux中提供了mkstemp 和 tmpfile 函數來處理臨時檔案。

mkstemp函數

mkstemp函數在系統中以唯一的檔案名建立一個檔案并打開,而且隻有目前使用者才能通路這個臨時檔案,并進行讀、寫操作。mkstemp函數隻有一個參數,這個參數是個以“xxxxxx”結尾的非空字元串。mkstemp函數會用随機産生的字元串替換“xxxxxx”,保證了檔案名的唯一性。 函數傳回一個檔案描述符,如果執行失敗傳回-1。在glibc 2.0.6 以及更早的glibc庫中這個檔案的通路權限是0666,glibc 2.0.7以後的庫這個檔案的通路權限是0600。

臨時檔案使用完成後應及時删除,否則臨時檔案目錄會塞滿垃圾。由于mkstemp函數建立的臨時檔案不能自動删除,是以執行完mkstemp函數後要調用unlink函數,unlink函數删除檔案的目錄入口,但臨時檔案還可以通過檔案描述符進行通路,直到最後一個打開的程序關閉檔案操作符,或者程式退出後臨時檔案被自動徹底地删除。

tmpfile函數

如果您使用c library i/o函數,并且并沒有另一個程式使用這個臨時檔案,有個更簡潔的函數——tmpfile。tmpfile函數建立并打開一個臨時檔案,并且自動執行了unlink。tmpfile函數傳回一個檔案描述符,如果執行失敗傳回null。當程式執行了fclose或者退出時,資源被釋放。

另外,linux系統中還提供mktemp、 tmpnam、 和tempnam等函數,但是由于健壯性和安全性的問題,不建議使用。