日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C创建临时文件

發布時間:2025/3/15 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C创建临时文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:Linux下除了有實實在在的文件外,還可以創建臨時的文件和目錄,這里介紹兩個創建臨時文件的函數,tmpfilef和mkstemp,以及創建臨時目錄的函數mkdtemp。這三個函數具體用法如下。

一、創建一個無名的臨時文件,程序退出時關閉臨時文件
(1)頭文件 ? ? ? ?#include <stdio.h>
(2)函數原型 ? FILE?*tmpfile(void);
(3)返回值
? ? ? ? ? ? 成功:返回一個文件流
? ? ? ? ? ? 失敗:NULL,沒有創建臨時文件
注意:tmpfile創建的臨時文件只能讀取一次,讀取之后里面的內容就沒有了

具體代碼如下:

#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <dirent.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>#define MAXLINE 1029 int main(int argc,char *argv[]) {char tempname[100] = "hello";char line[MAXLINE]; //L_tmpnam是定義在頭文件<stdio.h>中FILE *fp;char buf[100];fp = tmpfile(); //創建臨時文件fputs("one line output",fp); //把數據寫到臨時文件流中rewind(fp); //重置流到文件頭fgets(line,sizeof(line),fp); //從臨時文件流中讀取數據fgets(buf,sizeof(buf),fp); //tmpfile創建的臨時文件只能讀取一次,讀取之后里面的內容就沒有了 printf("%s\n",line);printf("%s\n",buf);//fputs(line,stdout); //輸出數據 return 0;}

運行結果如下:

從圖中的顯示結果可知道驗證了這句話:tmpfile創建的臨時文件只能讀取一次,讀取之后里面的內容就沒有了

二、創建一個臨時文件,文件名自定義
(1)函數原型 ?int?mkstemp(char *template);
(2)參數:
? ? ? ? ? ? a、template:臨時文件的名字,最后6個字符一定是XXXXXX,絕對不能少,記得是大寫
(3)返回值:
? ? ? ? ? ? ?成功:文件描述符,并創建一個臨時文件,文件名是自定義的,后6個字符是系統自己填充
? ? ? ? ? ? ?失敗:-1
特點:這個函數創建的臨時文件可以讀多次,而且數據不會丟失,這是上面tmpfile函數所沒有的功能

具體代碼如下:

#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <dirent.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>#define MAXLINE 1029int main(int argc,char *argv[]) {int fd;char name[] = "/tmp/dirXXXXXX"; //后面記得加XXXXXX,并且是大寫的,創建臨時文件成功的時候系統會自動填充字符char buf2[100],buf1[100] = "hello world\n";char buf3[100];bzero(buf3,100); bzero(buf2,sizeof(buf2)); fd = mkstemp(name); //創建一個臨時文件if(fd == -1){perror("mkstemp");exit(1);}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個字符一定是XXXXXX,絕對不能少,記得是大寫
(3)返回值:
? ? ? ? ? ? ? 成功:返回指向目錄名的指針,創建目錄成功
? ? ? ? ? ? ? 失敗:NULL
注意:這個程序退出后不會自動從文件系統中刪除目錄,要用unlink函數來刪除

代碼如下:

#include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <dirent.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>#define MAXLINE 1029int main(int argc,char *argv[]) {char *path;DIR *entry;struct dirent *ep;struct stat fileinfo;bzero(&fileinfo,sizeof(fileinfo));char name[] = "/tmp/dirXXXXXX";path = mkdtemp(name); //創建一個臨時目錄if(path == NULL){perror("mkdtemp");exit(1);}lstat(path,&fileinfo);if(S_ISDIR(fileinfo.st_mode)) //判斷是否是目錄{printf("the file is directory\n");}else if(S_ISREG(fileinfo.st_mode)) //判斷是否是普通文件{printf("the file is regular file\n");} 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){ep = readdir(entry); //讀目錄中的文件if(ep == NULL)break;printf("%s\n",ep->d_name); //打印目錄中的文件名字} unlink(path); //解除連接,從文件系統中刪除創建的臨時目錄return 0; }

運行效果如下:

關閉文件方法(remove和unlink)

1、

先關后刪

os.close(fd) os.remove(fname) fd 為文件描述符與文件對象不是一樣的需要系統級別的關閉

2、

  • 當remove() 中的pahtname指定為目錄時,相當于調用rmdir 刪除目錄,
  • 當remove() 中的pathname指定問文件時,相當于調用unlink 刪除文件鏈接

所以發現remove是間接調用unlink來刪除文件的目的。

使用方法

??int remove(const char *pathname); ?// #include <stdio.h>
? ?int unlink(const char *pathname); ?// #include <unistd.h>

? ?int rmdir(const char *pathname); ? // #include <unistd.h>

總結

以上是生活随笔為你收集整理的C创建临时文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产淫视 | 亚洲欧美第一 | 亚洲天堂av一区二区三区 | 性视频一区| 在线免费观看视频黄 | 国产精品亚洲综合 | 99国产精品无码 | 又污又黄又爽的网站 | 亚洲视频中文 | 欧美日韩三级在线观看 | 青娱乐国产在线 | 国产一区二区三区 | 久久久999精品 | 久久成人a毛片免费观看网站 | 午夜精品久久久久久久99热黄桃 | 国产精品一区二区黑人巨大 | 国产精品视频免费在线观看 | 欧美日韩成人免费观看 | 欧美日韩国产一级 | 一级福利视频 | 人妻一区在线 | 日本一道在线 | 96亚洲精品久久久蜜桃 | 免费av网站在线观看 | 欧美在线资源 | 99国产精品久久久久久久成人 | 国产精品久久久久久久免费 | www日韩欧美| 久久在线视频免费观看 | 免费大片黄在线观看视频网站 | 香蕉视频在线网站 | 男人天堂社区 | 天天躁夜夜躁av天天爽 | 麻豆精品av| 小早川怜子久久精品中文字幕 | 亚洲视频一 | 国产精品综合一区二区 | 蜜臀久久99精品久久久久久 | 捆绑调教sm束缚网站 | 日本成人动漫在线观看 | 国产av无码国产av毛片 | 五月天天色 | 国产不卡视频一区二区三区 | 久久avav | 免费观看在线播放 | 五月天激情开心网 | 亚洲狼人天堂 | 国产人人插 | 国产视频一区二区三区四区五区 | 午夜精品久久久久久久久 | a天堂亚洲| 亚洲午夜剧场 | 麻豆md0077饥渴少妇 | 午夜影院一区二区三区 | 九九九在线观看 | 亚洲免费成人av | 亚洲hhh | 成人免费毛片嘿嘿连载 | 色女仆影院 | 毛片av免费看 | 超碰网址 | 中文字幕97 | 污片在线免费看 | 一区二区三区不卡视频 | 精品伦精品一区二区三区视频 | 中文字幕精品一区久久久久 | 懂色一区二区三区 | 免费看黄色av | 午夜影院免费看 | 奶波霸巨乳一二三区乳 | 在线观看亚洲视频 | 激情五月五月婷婷 | 免费看一级片 | 日韩不卡在线视频 | 日韩在线小视频 | 麻豆一区二区99久久久久 | 狂野欧美性猛交免费视频 | 台湾色综合 | 亚洲综合射 | 欧美黄色小视频 | 日韩一卡二卡三卡四卡 | 亚洲视频精选 | 久久综合九色综合欧美狠狠 | 国产麻豆精品久久一二三 | 日本888xxxx| 亚洲av无码乱码在线观看富二代 | 欧美性生交xxxxx久久久 | 色屋在线 | 国产精欧美一区二区三区白种人 | 黄色变态网站 | 国精产品一区一区三区在线 | 日本一区二区成人 | 国产午夜精品一区 | 小色瓷导航 | 永久视频在线 | 草久久免费视频 | 91丨porny丨国产 | 国产主播中文字幕 | 国产精品第1页 |