亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在linux下使用c語言操作臨時文件

2019-11-17 05:03:01
字體:
來源:轉載
供稿:網友
/******************************************************************
*本文首發于bbs.bluegem.org的CWorld區
*本人email:chenfei@sohu.com
*如轉載本文,請保留首發地和本人聯絡方式,以方便交流,
謝謝!
******************************************************************/ 
    有時程序需要存儲很大量的數據,或者在幾個進程間交換數據,這時您可能考慮到使用臨時文件。使用臨時文件要考慮幾個問題:
1、保證臨時文件間的文件名不互助沖突。
2、保證臨時文件中內容不被其他用戶或者黑客偷看、刪除和修改。
所以在linux下有專門處理臨時文件的函數
mkstemp函數
    mkstemp函數將在系統中以獨一無二的文件名創建一個文件并打開,而且只有當前用戶才有訪問這個臨時文件的權限,當前用戶對這個臨時文件可以打開并進行讀、寫操作。mkstemp函數只有一個參數,這個參數是個以“XXXXXX”結尾的非空字符串。mkstemp函數會用隨機產生的字符串替換“XXXXXX”,保證了文件名的唯一性。函數返回一個文件描述符,假如執行失敗返回-1。在glibc 2.0.6 以及更早的glibc庫中這個文件的訪問權限是0666 ,glibc 2.0.7 以后的庫這個文件的訪問權限是0600。
    當臨時文件完成她的使命假如不把它清除干凈把或者程序由于意外在臨時文件被清除前就已經退出,臨時文件所在的目錄會塞滿垃圾。由于mkstemp函數創建的臨時文件不能自動刪除(請參考下文中的tmpfile函數)。執行完mkstemp函數后要調用unlink函數,unlink函數刪除文件的目錄入口,所以臨時文件還可以通過文件描述符進行訪問,直到最后一個打開的進程關閉文件操作符,或者程序退出后臨時文件被自動徹底地刪除。
例程:
直接使用advanced linux PRogramming的例程,只把注釋翻譯一下
#include <stdlib.h>
#include <unistd.h>
/* A handle for a temporary file created with write_temp_file. In
this implementation, it’s just a file descriptor. */
/*write_temp_file是個操作臨時文件的句柄,本例中只是個文件描述符*/
typedef int temp_file_handle;
/* Writes LENGTH bytes from BUFFER into a temporary file. The
temporary file is immediately unlinked. Returns a handle to the
temporary file. */
/*在這函數從BUFFER中向臨時文件寫入LENGTH字節數據。臨時文件在剛一創建就被刪除掉。函數會返回臨時文件的句柄。*/
temp_file_handle write_temp_file (char* buffer, size_t length)
{
/* Create the filename and file. The XXXXXX will be replaced with
 characters that make the filename unique. */
/*新建文件名和文件,文件名中的XXXXXX將被隨機字符串代替,以保證文件名在系統中的唯一性*/
 char temp_filename[] = “/tmp/temp_file.XXXXXX”;
 int fd = mkstemp (temp_filename);
 /* Unlink the file immediately, so that it will be removed when the
 file descriptor is closed. */
 /*文件馬上被unlink,這樣只要文件描述符一關閉文件就會被自動刪除*/
 unlink (temp_filename);
 /* Write the number of bytes to the file first. */
 /*首先寫入即將寫入數據的長度*/
 write (fd, &length, sizeof (length));
 /* Now write the data itself. */
 /*寫入數據本身*/
 write (fd, buffer, length);
 /* Use the file descriptor as the handle for the temporary file. */
 /*函數返回文件描述符,作為臨時文件的句柄*/
 return fd;
}
/* Reads the contents of a temporary file TEMP_FILE created with
write_temp_file. The return value is a newly allocated buffer of
those contents, which the caller must deallocate with free.
*LENGTH is set to the size of the contents, in bytes. The
temporary file is removed. */
/*從被write_temp_file創建的臨時文件中讀取數據。返回值是含有文件內容的新申請到的內存塊,這塊內存應該又調用read_temp_file者釋放。
*length是臨時文件正文內容的長度。執行完read_temp_file函數后臨時文件被徹底刪除*/
char* read_temp_file (temp_file_handle temp_file, size_t* length)
{
 char* buffer;
 /* The TEMP_FILE handle is a file descriptor to the temporary file. */
 /*fd是訪問臨時文件的文件描述符*/
 int fd = temp_file;
 /* Rewind to the beginning of the file. */
 /*把文件指針指向文件開頭*/
 lseek (fd, 0, SEEK_SET);
 /* Read the size of the data in the temporary file. */
 /*獲得臨時文件正文長度*/
 read (fd, length, sizeof (*length));
 /* Allocate a buffer and read the data. */
 /*分配內存塊,讀取數據*/
 buffer = (char*) malloc (*length);
 read (fd, buffer, *length);
 /* Close the file descriptor, which will cause the temporary file to
 go away. */
 /*關閉文件描述符,臨時文件被徹底刪除*/
 close (fd);
 return buffer;
}


tmpfile函數
    假如您使用C library I/O函數,并且并沒有另一個程序使用這個臨時文件(筆者注:按我的理解是在同一進程或具有父子關系的進程組中),有個更簡潔的函數——tmpfile。tmpfile函數創建并打開一個臨時文件,并且自動執行了unlink了這個臨時文件。tmpfile函數返回一個文件描述符,假如執行失敗返回NULL。當程序執行了fclose或者退出時,資源被釋放。
    linux系統中還提供mktemp、 tmpnam、 和tempnam等函數,但是由于健壯性和安全方面理由不建議使用他們。
更多文章 更多內容請看C/C++進階技術文檔  C++編程  Linux文件相關文章專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线xxx| 亚洲日本中文字幕| 欧美日韩精品在线观看| 欧美日韩成人黄色| 国产精品日韩在线观看| 日韩成人av网| 日韩在线高清视频| 俺也去精品视频在线观看| 97视频在线观看免费| 68精品久久久久久欧美| 国产精品99久久久久久白浆小说| 日韩成人小视频| 日韩最新中文字幕电影免费看| 国产精品欧美风情| 国产色综合天天综合网| 欧美成人免费网| 欧美精品在线免费播放| 国内伊人久久久久久网站视频| 日本aⅴ大伊香蕉精品视频| 韩曰欧美视频免费观看| 国产精品福利久久久| 日韩av资源在线播放| 91福利视频网| 久久久国产精品x99av| 丝袜美腿精品国产二区| 中文字幕欧美日韩在线| 日韩在线观看免费高清| 日韩欧美亚洲国产一区| 这里只有精品在线观看| 91香蕉嫩草神马影院在线观看| 26uuu另类亚洲欧美日本老年| www.精品av.com| 色在人av网站天堂精品| 国模视频一区二区三区| 日韩在线视频国产| 91免费高清视频| 色七七影院综合| 久久久之久亚州精品露出| 美女性感视频久久久| 午夜精品一区二区三区在线视| 亚洲香蕉成人av网站在线观看| 国产精品永久在线| 中文字幕精品在线视频| 亚洲成人网在线观看| 国产精品久久久久久av下载红粉| 欧美性做爰毛片| 亚洲美女av电影| 亚洲一区二区黄| 欧美午夜性色大片在线观看| 久久久久久网站| 欧美疯狂性受xxxxx另类| 久久精品成人动漫| 成人激情免费在线| 日本一区二区三区在线播放| 日韩欧美aaa| 亚洲综合在线中文字幕| 97久久精品视频| 国产在线高清精品| 欧美色视频日本高清在线观看| 亚洲国产成人精品电影| 中文字幕亚洲欧美日韩高清| 亚洲欧美一区二区三区情侣bbw| 国产va免费精品高清在线| 亚洲免费av网址| 亚洲欧洲国产伦综合| 91精品久久久久久久久青青| 国产精品免费看久久久香蕉| 亚洲男人天堂2019| 日韩动漫免费观看电视剧高清| 午夜精品久久久久久久久久久久久| 日本aⅴ大伊香蕉精品视频| 亚洲a成v人在线观看| 欧洲成人性视频| 日韩在线精品一区| www.久久撸.com| 久久久久九九九九| 欧美日韩国产综合视频在线观看中文| 欧美视频在线观看免费网址| 日韩在线免费高清视频| 欧美日韩一区二区免费在线观看| 日韩欧美一区二区在线| 亚洲最大成人在线| 久久久av一区| 欧美国产日韩一区二区三区| 亚洲第一网中文字幕| 欧美激情免费看| 日韩欧美在线第一页| 成人激情视频在线| 亚洲国产中文字幕久久网| 久久精品中文字幕电影| 精品久久久久久中文字幕一区奶水| 日韩亚洲欧美中文高清在线| 久久国产精品久久久久久| 国产福利视频一区| 成人中文字幕在线观看| 国产主播在线一区| 中文.日本.精品| 亚洲欧美激情视频| 性欧美视频videos6一9| 亚洲白虎美女被爆操| 国产精品678| 国产国产精品人在线视| 亚洲91av视频| 日本成人免费在线| 国产亚洲欧美aaaa| 日韩免费观看av| 亚洲精品一区二区三区婷婷月| 亚洲天堂影视av| 国产视频观看一区| 亚洲精品少妇网址| 久久99精品国产99久久6尤物| 亚洲a∨日韩av高清在线观看| 午夜精品久久久久久久白皮肤| www.国产精品一二区| 日韩亚洲成人av在线| 国产一区二区三区在线播放免费观看| 欧美激情喷水视频| 亚洲高清色综合| 久久久久北条麻妃免费看| 91国自产精品中文字幕亚洲| 久久久久中文字幕2018| 日韩av电影中文字幕| 日韩视频免费在线| 久久av中文字幕| 91在线观看免费高清| 亚洲精品丝袜日韩| 欧美一区二区色| 日韩二区三区在线| 亚洲高清色综合| 色偷偷噜噜噜亚洲男人的天堂| 欧美电影在线观看网站| 亚洲成年人在线播放| 欧美成人黄色小视频| 日韩亚洲成人av在线| 欧美激情精品久久久久久免费印度| 国产成人精品视频| 亚洲国产成人91精品| 4438全国亚洲精品在线观看视频| 色七七影院综合| 久久伊人精品天天| 亚洲视频欧洲视频| 国模精品视频一区二区三区| 日韩精品在线免费播放| 久久亚洲私人国产精品va| 91av视频在线播放| 亚洲精品av在线播放| 美日韩精品免费视频| 国产欧美中文字幕| 欧美日韩在线观看视频小说| 91久久在线视频| 国产99视频在线观看| 高跟丝袜一区二区三区| 欧美高清视频一区二区| 国产精品久久久久久婷婷天堂| 亚洲美女在线观看| 日韩综合中文字幕| 日韩中文字幕免费| 亚洲第一在线视频| 亚洲成人a级网| 亚洲午夜国产成人av电影男同| 亚洲第一福利视频| 91美女高潮出水| 亚洲国产精品成人va在线观看| 久久精品一本久久99精品|