前言:linux下除了有實實在在的檔案外,還可以建立臨時的檔案和目錄,這裡介紹兩個建立臨時檔案的函式,tmpfilef和mkstemp,以及建立臨時目錄的函式mkdtemp。這三個函式具體用法如下。
一、建立乙個無名的臨時檔案,程式退出時關閉臨時檔案
(1)標頭檔案 #include
(2)函式原型 file *tmpfile(void);
(3)返回值
成功:返回乙個檔案流
失敗:null,沒有建立臨時檔案
注意:tmpfile建立的臨時檔案只能讀取一次,讀取之後裡面的內容就沒有了
具體**如下:
#include #include #include #include #include #include #include #include #include #include #define maxline 1029
int main(int argc,char *ar**)
執行結果如下:
從圖中的顯示結果可知道驗證了這句話:tmpfile建立的臨時檔案只能讀取一次,讀取之後裡面的內容就沒有了
二、建立乙個臨時檔案,檔名自定義
(1)函式原型 int mkstemp(char *template);
(2)引數:
a、template:臨時檔案的名字,最後6個字元一定是******,絕對不能少,記得是大寫
(3)返回值:
成功:檔案描述符,並建立乙個臨時檔案,檔名是自定義的,後6個字元是系統自己填充
失敗:-1
特點:這個函式建立的臨時檔案可以讀多次,而且資料不會丟失,這是上面tmpfile函式所沒有的功能
具體**如下:
#include #include #include #include #include #include #include #include #include #include #define maxline 1029
int main(int argc,char *ar**)
printf("temp file name is: %s\n",name);
write(fd,buf1,strlen(buf1)); //寫資料到臨時檔案中
lseek(fd,0,seek_set); //重新把檔案指標偏移到檔案頭
read(fd,buf2,sizeof(buf2)); //從臨時檔案中讀出資料
lseek(fd,0,seek_set); //重新把檔案指標偏移到檔案頭
read(fd,buf3,sizeof(buf3)); //可以讀多次,而且資料不會丟失
printf("%s",buf3);
fputs(buf2,stdout);
return 0;
}
執行效果如下:
比較上面的函式這裡的區別出來了:這個函式建立的臨時檔案可以讀多次,而且資料不會丟失,這是上面tmpfile函式所沒有的功能
好了上最後乙個函式:
三、建立臨時目錄
(1) 函式原型 char *mkdtemp(char *template);
(2)引數:臨時目錄的路徑,最後6個字元一定是******,絕對不能少,記得是大寫
(3)返回值:
成功:返回指向目錄名的指標,建立目錄成功
失敗:null
注意:這個程式退出後不會自動從檔案系統中刪除目錄,要用unlink函式來刪除
**如下:
#include #include #include #include #include #include #include #include #include #define maxline 1029
int main(int argc,char *ar**)
lstat(path,&fileinfo);
if(s_isdir(fileinfo.st_mode)) //判斷是否是目錄
else if(s_isreg(fileinfo.st_mode)) //判斷是否是普通檔案
printf("temp directpry name:%s\n",path);
entry = opendir(path); //開啟目錄
chdir(path); //進入目錄
mkdir("test",0777); //建立乙個名字為test的目錄
int fd = open("test.txt",o_rdwr|o_creat,0777); //以讀寫許可權開啟乙個名字為test.txt的檔案,如果不存則建立
//可以在臨時目錄中建立檔案並進行讀寫操作
char buf4 = "hello world";
char buf5[100];
bzero(buf5,sizeof(buf5));
write(fd,buf4,sizeof(buf4));
lseek(fd,0,seek_set); //重新把檔案指標偏移到檔案頭
read(fd,buf5,sizeof(buf5));
printf("%s\n",buf5);
while(1)
unlink(path); //解除連線,從檔案系統中刪除建立的臨時目錄
return 0;
}
執行效果如下:
關閉檔案方法(remove和unlink)
1、先關後刪
os.close(fd)os.remove(fname)
fd 為檔案描述符與檔案物件不是一樣的需要系統級別的關閉2、
所以發現remove是間接呼叫unlink來刪除檔案的目的。
使用方法
int remove(const char *pathname); // #include
int unlink(const char *pathname); // #include
int rmdir(const char *pathname); // #include
C 建立臨時檔案
1.在臨時檔案只能夠建立乙個臨時檔案並返回該檔案的完整路徑 在臨時檔案只能夠建立乙個臨時檔案並返回該檔案的完整路徑 c documents and settings yourname local settings temp t e6.tmp system.io.path.gettempfilenam...
c語言建立臨時檔案
建立名字唯一的臨時檔案 推薦使用tmpfile和mkstemp,因為這兩個函式建立檔案的同時並開啟檔案,總的來說安全又可靠。tmpfile返回的是檔案流指標file mkstemp返回的是檔案描述符。表頭檔案 include 函式定義 file tmpfile void 函式描述 建立唯一的臨時檔案...
unix臨時檔案建立
看例子,建立乙個檔案,在unlink,檔案i節點的鏈結數變為0,但持有該檔案的控制代碼,依然可以fgets和fputs該檔案,說明檔案的資料塊依然存在,在fclose之後,才徹底刪除,這就是使用臨時檔案的原理 include include include include include setvb...