很多情況下,程式會利用一些檔案形式的臨時儲存手段。
用tmpname函數可以產生一個唯一的檔案名稱。
#include<stdio.h>
char *tmpname( char *s)
tmpname函數返回一個不與任何已存在的檔案名稱同名的有效檔案名稱,如果字串s不為空白,檔案名稱也會寫入它。對tmpname的後續調用
會覆蓋存放傳回值的靜態儲存區。
如果需要立刻使用臨時檔案,你可以用tmpfile函數在給它命名的同時開啟它,這點非常的重要。因為另一個程式可能會建立去一個與tmpname返回的
檔案名稱同名的檔案,tmpfile()則完全避免了這種情況。
#include<stdio.h>
FILE *tmpfile(void);
tmpfile()返回一個檔案流指標,它指向一個唯一的臨時檔案。該檔案以讀寫的方式開啟,當對一個檔案的所有的引用都被刪除的時候,這個臨時檔案將會
被刪除。
如果出錯,tmpfile函數返回null 指標,並設定errno的值。
#include <stdio.h>#include <stdlib.h>int main(){ char tmpname[L_tmpnam]; char *filename; FILE *tmpfp; filename = tmpnam(tmpname); printf("Temporary file name is: %s\n", filename); tmpfp = tmpfile(); if(tmpfp) printf("Opened a temporary file OK\n"); else perror("tmpfile"); exit(0);}
UNIX有另外一種產生臨時檔案名稱的方式,就是使用mktemp和mktemp函數。
#include<stdlib.h>
char *mktemp(char *template);
int mkstemp(char *template);
mktemp函數以給定的模板為基礎建立一個唯一的檔案名稱,template參數必須是一個以6個X字元結尾的字串。
mkstemp函數類似於tempfile(),它也是同時建立並開啟一個臨時檔案。檔案名稱的產生方法和mktemp一樣,但是它的傳回值是一個
開啟的,底層的檔案描述符。
在應該在程式中使用"建立並開啟"函數tmpfile和mkstemp函數,而不要用tmpname和mktemp函數。