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

首頁 > 學院 > 操作系統 > 正文

標準I/O庫之臨時文件

2024-06-28 13:28:41
字體:
來源:轉載
供稿:網友
標準I/O庫之臨時文件

ISO C標準I/O庫提供了兩個函數以幫助創建臨時文件。

#include <stdio.h>char *tmpnam( char *ptr );返回值:指向唯一路徑名的指針FILE *tmpfile( void );返回值:若成功則返回文件指針,若出錯則返回NULL

若ptr是NULL,則所產生的路徑名存放在一個靜態區中,指向該靜態區的指針作為函數值返回。下一次調用tmpnam時,會重寫該靜態區(這意味著,如果我們調用此函數多次,而且想保存路徑名,則我們應該保存該路徑名的副本,而不是指針的副本)。如若ptr不是NULL,則認為它指向長度至少是L_tmpnam個字符的數組(常量L_tmpnam定義在頭文件<stdio.h>中)。所產生的路徑名存放在該數組中,ptr也作為函數值返回。

tmpfile創建一個臨時二進制文件(類型wb+),在關閉該文件或程序結束時將自動刪除這種文件。注意,UNIX對二進制文件不作特殊區分。

程序清單5-4 tmpnam和tmpfile函數實例

[root@localhost apue]# cat PRog5-4.c#include "apue.h"intmain(void){        char name[L_tmpnam], line[MAXLINE];        FILE *fp;        printf("%s/n", tmpnam(NULL));           /* first tmp name */        tmpnam(name);                           /* second tmp name */        printf("%s/n", name );        if((fp = tmpfile()) == NULL)            /* create temp file */                err_sys("tmpfile error");        fputs("one line fo output /n", fp );    /* write to temp file */        rewind(fp);                             /* then read it back */        if(fgets(line, sizeof(line), fp) == NULL)                err_sys("fgets error");        fputs(line, stdout);                    /* print the line we wrote */        exit(0);}

執行程序:

[root@localhost apue]# ./prog5-4/tmp/fileNu68ZQ/tmp/fileaKBqgEone line fo output

不要被上面的實例程序所迷惑,并不是說必須先用tmpnam產生一個路徑名,然后再調用tmpfile創建臨時文件。tmpfile單獨使用即可創建臨時文件。

tmpfile函數經常使用的標準UNIX技術是先調用tmpnam產生一個唯一的路徑名,然后,用該路徑名創建一個文件,并立即unlink它。

Single UNIX Specification為處理臨時文件定義了另外兩個函數,它們是XSI的擴展部分。其中第一個是tempnam函數。

#include <stdio.h>char *tempnam( const char *directory, const char *prefix );返回值:指向唯一路徑名的指針

tempnam是tmpnam的一個變體,它允許調用者為所產生的路徑名指定目錄和前綴。對于目錄有4種不同的選擇,按下列順序判斷其條件是否為真,并且使用第一個為真的作為目錄:

(1)如果定義了環境變量TMPDIR,則用其作為目錄。

(2)如果參數directory非NULL,則用其作為目錄。

(3)將<stdio.h>中的字符串P_tmpdir用作目錄。

(4)將本地目錄(通常是/tmp)用作目錄。

如果prefix非NULL,則它應該是最多包含5個字符的字符串,用其作為文件名的頭幾個字符。

該函數調用malloc函數分配動態存儲區,用其存放所構造的路徑名。.當不再使用此路徑名時就可釋放此存儲區。

程序清單5-5 演示tempnam函數

[root@localhost apue]# cat prog5-5.c#include "apue.h"intmain(int argc, char *argv[]){        if(argc != 3)                err_quit("usage: prog5-5 <directory> <prefix>");        printf("%s/n", tempnam(argv[1][0] != ' ' ? argv[1] : NULL,                argv[2][0] != ' ' ? argv[2] : NULL));        exit(0);}

注意,如果命令行參數(目錄或前綴)中的任一個以空白開始,則將其作為null指針傳送給該函數。下面顯示使用該程序的各種方式。

[root@localhost apue]# ./prog5-5 /home/zhu TEMP        指定目錄和前綴/home/zhu/TEMPd18A3w[root@localhost apue]# ./prog5-5 " " PFX            使用默認目錄:P_tmpdir/tmp/PFXj8BpNK[root@localhost apue]# TMPDIR=/var/tmp ./prog5-5 /usr/tmp " "    使用環境變量:無前綴/var/tmp/fileMpGbXZ[root@localhost apue]# TMPDIR=/no/such/dir ./prog5-5 /home/zhu/test QQQ/home/zhu/test/QQQaLZExQ                    忽略無效環境目錄

上述選擇目錄名的四個步驟按序執行,該函數也檢查相應的目錄名是否有意義。如果該目錄并不存在(例如/no/such/dir),則跳過這一步,試探對目錄名的下一次選擇。

XSI定義的第二個函數是mkstemp。它類似于tmpfile,但是該函數返回的不是文件指針,而是臨時文件的打開文件描述符。

#include <stdio.h>int mkstemp( char *template );返回值:若成功則返回文件描述符,若出錯則返回-1

它所返回的文件描述符可用于讀、寫文件。臨時文件的名字是用template字符串參數選擇的。該字符串是一個路徑名,其最后6個字符設置為XXXXXX。該函數用于不同字符代換XXXXXX,以創建一路徑名。如若mkstemp成功返回,它就會修改template字符串以反映臨時文件的名字。

與tmpfile不同的是,mkstemp創建的臨時文件不會自動刪除。如若想從文件系統名字空間中刪除該文件,則我們需要自行unlink它。

使用tmpnam和tempnam的一個不足之處是:在返回唯一路徑名和應用程序用該路徑名創建文件之間有一個時間窗口。在該事件窗口期間,另一個進程可能創建一個同名文件。tmpfile和mkstemp函數則不會產生此種問題,可以使用它們代替tmpnam和tempnam。

mktemp函數類似于mkstemp,只不過mktemp只構建一個適用于臨時文件的名字,它沒有創建一個文件,所以它也有與tmpnam和tempnam相同的不足之處。mktemp函數在Single UNIX Specification中被標記為遺留接口。Single UNIX Specification的未來版本可能將遺留接口全部刪除,因此應當避免使用它。

本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書的更多內容可參考:http://www.apuebook.com/。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品黄视频| 成人欧美一区二区三区黑人| 亚洲人成在线播放| 成人97在线观看视频| 国产99视频在线观看| 日韩精品中文字幕在线播放| 久久久久久国产精品三级玉女聊斋| 91免费精品视频| 91免费在线视频网站| 亚洲成色777777在线观看影院| 国产综合久久久久久| 日韩av毛片网| 欧美在线视频一区| 成人免费网站在线看| 在线亚洲国产精品网| 亚洲精品资源美女情侣酒店| 欧美一级视频在线观看| 国模精品视频一区二区三区| 国产精品视频不卡| 国自在线精品视频| 欧美激情精品久久久久| 热门国产精品亚洲第一区在线| 国产精品亚洲аv天堂网| 欧美性生交xxxxx久久久| 久久成人18免费网站| 8x海外华人永久免费日韩内陆视频| 亚洲精品中文字幕有码专区| 亚洲人成亚洲人成在线观看| 国产va免费精品高清在线观看| 久久大大胆人体| 亚洲最大激情中文字幕| 综合136福利视频在线| 国产欧美久久久久久| 亚洲男人第一网站| 4438全国成人免费| 2018国产精品视频| 91精品久久久久久久久久久久久久| 日韩免费观看在线观看| 欧美日韩亚洲精品内裤| 亚洲午夜国产成人av电影男同| 日韩高清电影好看的电视剧电影| 中文字幕亚洲综合久久| 亚洲国产高潮在线观看| 亚洲欧美中文日韩v在线观看| 精品久久久国产| 国产精品日韩专区| 国产亚洲aⅴaaaaaa毛片| 精品国产精品自拍| 欧美综合国产精品久久丁香| 亚洲国产欧美精品| 亚洲视屏在线播放| 国产在线拍偷自揄拍精品| 国产精品男人爽免费视频1| 久久色免费在线视频| 日本高清+成人网在线观看| 乱亲女秽乱长久久久| 欧美一区二区大胆人体摄影专业网站| 亚洲高清不卡av| 日韩中文字幕欧美| 欧美精品在线观看| 日韩高清a**址| 青青a在线精品免费观看| 国产精品盗摄久久久| 欧美日韩成人精品| 日韩经典一区二区三区| 45www国产精品网站| 日韩高清av在线| 国产精品一区二区三区成人| 国产成人免费av电影| 欧美成人三级视频网站| 欧美亚洲国产日韩2020| 日韩欧美国产骚| 中文字幕精品—区二区| 国产日本欧美一区| 欧美多人爱爱视频网站| 亚洲性69xxxbbb| 91精品国产91久久久久| www.国产精品一二区| 亚洲va男人天堂| 91精品国产高清久久久久久| 日韩av电影手机在线观看| 91国偷自产一区二区三区的观看方式| 国产一区二区三区在线看| 国内精品400部情侣激情| 国产大片精品免费永久看nba| 精品无人区太爽高潮在线播放| 亚洲欧美日韩国产中文专区| 欧美影院在线播放| 欧美高清性猛交| 中文字幕一精品亚洲无线一区| 91精品国产高清久久久久久久久| 亚洲激情视频在线观看| 亚洲欧洲高清在线| 国产精品白丝jk喷水视频一区| 国产一区二区三区视频| 欧美日本在线视频中文字字幕| 日韩欧美国产中文字幕| 日本在线精品视频| 国产日韩欧美视频在线| 亚洲xxxxx电影| 日韩精品视频免费专区在线播放| 色综合久久中文字幕综合网小说| 国产亚洲视频中文字幕视频| 色噜噜狠狠狠综合曰曰曰| 久久激情视频免费观看| 日韩免费看的电影电视剧大全| 北条麻妃在线一区二区| 国产精品美乳一区二区免费| 国产国产精品人在线视| 久热精品视频在线观看一区| 国产视频在线观看一区二区| 精品成人乱色一区二区| 成人久久精品视频| 久久久国产视频| 日本欧美一二三区| 亚洲一区二区中文| 亚洲精品视频二区| 日韩最新在线视频| 欧美高清视频在线观看| 成人av番号网| 亚洲精品短视频| 国产成人综合精品在线| 日韩欧美在线视频| 一区二区三区高清国产| 深夜福利91大全| 亚洲激情在线视频| 狠狠躁夜夜躁人人躁婷婷91| 96精品视频在线| 欧美电影在线免费观看网站| 国产v综合ⅴ日韩v欧美大片| 欧美最近摘花xxxx摘花| 青青草原成人在线视频| 欧美又大又硬又粗bbbbb| 成人在线国产精品| 成人亚洲激情网| 国产精品∨欧美精品v日韩精品| www.亚洲男人天堂| 91视频国产高清| 国产精品一二三在线| 亚洲精品久久久久国产| 日韩av在线网页| 国产精品一区二区在线| 欧美性xxxx极品高清hd直播| 日韩中文字幕网| 欧美性资源免费| 欧美成人网在线| 欧美国产精品va在线观看| 一区二区三区视频免费在线观看| 久久国产精品久久久久| 亚洲国产一区二区三区四区| 亚洲精品欧美日韩| 亚洲天堂成人在线视频| 在线免费观看羞羞视频一区二区| 97国产精品视频| 视频一区视频二区国产精品| 国产精品v片在线观看不卡| 久久精品国产综合| 欧洲永久精品大片ww免费漫画| 国产成人精品亚洲精品| 最近2019中文字幕一页二页| 久久久91精品国产| 激情懂色av一区av二区av| 欧美成人免费小视频| www高清在线视频日韩欧美|