使用臨時檔案要考慮幾個問題:
保證臨時檔案間的檔名不互助衝突。
保證臨時檔案中內容不被其他使用者或者黑客偷看、刪除和修改。
linux中提供了mkstemp 和 tmpfile 函式來處理臨時檔案。
mkstemp函式
mkstemp函式在系統中以唯一的檔名建立乙個檔案並開啟,而且只有當前使用者才能訪問這個臨時檔案,並進行讀、寫操作。mkstemp函式只有乙個引數,這個引數是個以「******」結尾的非空字串。mkstemp函式會用隨機產生的字串替換「******」,保證了檔名的唯一性。 函式返回乙個檔案描述符,如果執行失敗返回-1。在glibc 2.0.6 以及更早的glibc庫中這個檔案的訪問許可權是0666,glibc 2.0.7以後的庫這個檔案的訪問許可權是0600。
#include
#include
#include
int write_temp_file(char* buffer,size_t length)
char* read_temp_file(int fd, size_t* length)
int main(int argc, char** argv)
tmpfile函式
如果您使用c library i/o函式,並且並沒有另乙個程式使用這個臨時檔案,有個更簡潔的函式——tmpfile。tmpfile函式建立並開啟乙個臨時檔案,並且自動執行了unlink。tmpfile函式返回乙個檔案描述符,如果執行失敗返回null。當程式執行了fclose或者退出時,資源被釋放。
另外,linux系統中還提供mktemp、 tmpnam、 和tempnam等函式,但是由於健壯性和安全性的問題,不建議使用。
可以迴圈呼叫該函式,而依次獲得各項資料,知道無任何資料可讀時函式返回 null 。
#include
#include
#include
int
main()
執行輸出效果相當於執行命令:cat /etc/passwd 。
getpwent 函式會依次返回每個使用者資訊。當到達檔案結尾時,他會返回乙個空指標。一旦搜尋完畢所有的有效實體,我們可以使用endpwent函式來結束處理過程。 setpwent函式可以在密碼檔案中重新設定指標使其指向檔案的開頭,這樣當下次呼叫getpwent函式時可以重新開始遍歷。這些函式的操作與我們在 第3章所討論的目錄遍歷函式opendir,readdir,closedir相類似。
使用者與組標識可由其他的乙個通常不用的函式來得到:
#include
#include
uid_t geteuid(void);
gid_t getgid(void);
gid_t getegid(void);
int setuid(uid_t uid);
int setgid(gid_t gid);
我們可以檢視系統手冊頁來得到關於組標識與有效使用者標識的更為詳細的內容,儘管我們會發現我們根本就不需要來操作這些函式。
Linux環境(四) 臨時檔案與使用者資訊
臨時檔案 通常,程式需要以檔案的形式使用臨時儲存。這也許是儲存計算的中間結果,或者是在實際操作之前所做的檔案拷貝備份。例如,乙個資料程式在刪除記錄時會使用臨時檔案。檔案會收集需要儲存的資料庫實體,然後在操作結束時,臨時檔案會成為新的資料庫而原始的會被刪除。臨時檔案的大量使用隱藏了他的乙個缺點。我們必...
Linux環境(四) 臨時檔案與使用者資訊
臨時檔案 通常,程式需要以檔案的形式使用臨時儲存。這也許是儲存計算的中間結果,或者是在實際操作之前所做的檔案拷貝備份。例如,乙個資料程式在刪除記錄時會使用臨時檔案。檔案會收集需要儲存的資料庫實體,然後在操作結束時,臨時檔案會成為新的資料庫而原始的會被刪除。臨時檔案的大量使用隱藏了他的乙個缺點。我們必...
Linux環境(四) 臨時檔案與使用者資訊
臨時檔案 通常,程式需要以檔案的形式使用臨時儲存。這也許是儲存計算的中間結果,或者是在實際操作之前所做的檔案拷貝備份。例如,乙個資料程式在刪除記錄時會使用臨時檔案。檔案會收集需要儲存的資料庫實體,然後在操作結束時,臨時檔案會成為新的資料庫而原始的會被刪除。臨時檔案的大量使用隱藏了他的乙個缺點。我們必...