版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
講師:任繼梅系列課程—C語(yǔ)言高級(jí)編程標(biāo)準(zhǔn)I/O第二章課程目標(biāo)掌握C語(yǔ)言自定義類型結(jié)構(gòu)體的定義和使用、共用體、鏈表的建立和基本操作掌握C語(yǔ)言的存儲(chǔ)方式存儲(chǔ)類、鏈接、內(nèi)存管理掌握線性表和常用的數(shù)據(jù)結(jié)構(gòu)線性表、存儲(chǔ)方式、順序表、鏈表、隊(duì)列、棧掌握常用的查詢和排序算法順序查詢、折半查詢、插入排序、選擇拍尋掌握動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)課程安排第一天上午:自定義數(shù)據(jù)類型下午:鏈表的建立和基本操作第二天上午:數(shù)據(jù)的存儲(chǔ)方式下午:線性表第三天上午:隊(duì)列下午:棧第四天上午:查找下午:排序第五天上午:其他常用算法下午:靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)課前提問
結(jié)構(gòu)體是如何定義的?如何引用結(jié)構(gòu)體成員?指針怎樣引用結(jié)構(gòu)體成員?什么是共用體?怎么樣建立鏈表?如何刪除鏈表的一個(gè)節(jié)點(diǎn)?本章目標(biāo)了解文件的基本概念文件的基本分類File指針標(biāo)準(zhǔn)I/O流掌握文件的常見操作fopen/fclosefgets/fputsfgetc/fputcfwrite/fread標(biāo)準(zhǔn)I/O知識(shí)點(diǎn)1-文件概念:定義:
文件:一組相關(guān)數(shù)據(jù)的有序集合。 文件名:這個(gè)數(shù)據(jù)集合的名稱。按類型分類:常規(guī)文件ASCII碼文件二進(jìn)制的文件目錄字符設(shè)備塊設(shè)備有名管道套接口符號(hào)鏈接文件概念文件類型:常規(guī)文件:這種文件包含了某種形式的數(shù)據(jù)目錄文件:包含其他文件的名字以及指向與這些文件有關(guān)的信息指針。字符設(shè)備:這種類型提供對(duì)設(shè)備不帶緩沖的訪問,每次訪問長(zhǎng)度可變。塊設(shè)備:這種文件類型提供對(duì)設(shè)備帶緩沖的訪問,每次訪問以固定長(zhǎng)度為單位經(jīng)行。FIFO:用于進(jìn)程間通信套接字:用于進(jìn)程間的網(wǎng)絡(luò)通信符號(hào)鏈接:這種文件類型指向另一個(gè)文件。標(biāo)準(zhǔn)I/O知識(shí)點(diǎn)2-流和file對(duì)象不僅在UNIX系統(tǒng),在很多操作系統(tǒng)上都實(shí)現(xiàn)了標(biāo)準(zhǔn)I/O庫(kù)標(biāo)準(zhǔn)I/O庫(kù)由ANSIC標(biāo)準(zhǔn)說(shuō)明標(biāo)準(zhǔn)I/O庫(kù)處理很多細(xì)節(jié),如緩存分配、以優(yōu)化長(zhǎng)度執(zhí)行I/O等,這樣使用戶不必關(guān)心如何選擇合適的塊長(zhǎng)度標(biāo)準(zhǔn)I/O在系統(tǒng)調(diào)用函數(shù)基礎(chǔ)上構(gòu)造的,它便于用戶使用標(biāo)準(zhǔn)I/O庫(kù)及其頭文件stdio.h為底層I/O系統(tǒng)調(diào)用提供了一個(gè)通用的接口。文件指針FILE指針:每個(gè)被使用的文件都在內(nèi)存中開辟一個(gè)區(qū)域,用來(lái)存放文件的有關(guān)信息,這些信息是保存在一個(gè)結(jié)構(gòu)體類型的變量中,該結(jié)構(gòu)體類型是由系統(tǒng)定義的,取名為FILE。標(biāo)準(zhǔn)I/O庫(kù)的所有操作都是圍繞流(stream)來(lái)進(jìn)行的,在標(biāo)準(zhǔn)I/O中,流用FILE*來(lái)描述。標(biāo)準(zhǔn)I/O庫(kù)是由DennisRitchie在1975年左右編寫的流(stream)定義:所有的I/O操作僅是簡(jiǎn)單的從程序移進(jìn)或者移出,這種字節(jié)流,就稱為流。分類:文本流/二進(jìn)制流。標(biāo)準(zhǔn)I/O-流和FILE對(duì)象文本流定義:在流中處理的數(shù)據(jù)是以字符出現(xiàn)。在文本流中,’\n’被轉(zhuǎn)換成回車符CR和換行符LF的ASCII碼0DH和0AH。而當(dāng)輸出時(shí),0DH和0AH被轉(zhuǎn)成’\n’數(shù)字2001在文本流中的表示方法為‘2’
‘0’
‘0’
‘1’ASCII:50484849二進(jìn)制流定義:流中處理的是二進(jìn)制序列。若流中有字符,則用一個(gè)字節(jié)的二進(jìn)制
ASCII碼表示;若是數(shù)字,則用對(duì)應(yīng)的二進(jìn)制數(shù)表示。對(duì)’\n’不進(jìn)行變換數(shù)字2001在二進(jìn)制流中的表示方法為0000011111010001。
標(biāo)準(zhǔn)I/O知識(shí)點(diǎn)3-文件緩沖緩沖文件系統(tǒng)(高級(jí)磁盤IO)目的:盡量減少使用read/write的調(diào)用定義:系統(tǒng)自動(dòng)的在內(nèi)存中為每一個(gè)正在使用的文件開辟一個(gè)緩沖區(qū),從內(nèi)存向磁盤輸出數(shù)據(jù)必須先送到內(nèi)存緩沖區(qū),裝滿緩沖區(qū)在一起送到磁盤中去。從磁盤中讀數(shù)據(jù),則一次從磁盤文件將一批數(shù)據(jù)讀入到內(nèi)存緩沖區(qū)中,然后再?gòu)木彌_區(qū)逐個(gè)的將數(shù)據(jù)送到程序的數(shù)據(jù)區(qū)。分類:全緩存,行緩存,不緩存。非緩沖文件系統(tǒng)(低級(jí)磁盤IO)定義:依靠于操作系統(tǒng),通過操作系統(tǒng)的功能對(duì)文件進(jìn)行讀寫,是系統(tǒng)級(jí)的輸入輸出。緩存分類標(biāo)準(zhǔn)I/O提供了三種類型的緩存全緩存當(dāng)填滿I/O緩存后才進(jìn)行實(shí)際I/O操作,或者滿足一定條件后,系統(tǒng)通過調(diào)用malloc來(lái)獲得所需要的緩沖區(qū)域,默認(rèn)值。刷新(fflush):標(biāo)準(zhǔn)I/O的寫操作。當(dāng)緩沖區(qū)滿了,或者滿足一定的條件后,就會(huì)執(zhí)行刷新操作。行緩存當(dāng)在輸入和輸出中遇到換行符(‘\n’)時(shí),進(jìn)行I/O操作。當(dāng)流遇到一個(gè)終端時(shí),典型的行緩存。不帶緩存標(biāo)準(zhǔn)I/O庫(kù)不對(duì)字符進(jìn)行緩沖,例如stderr。很多的人機(jī)交互界面要求不可全緩存。標(biāo)準(zhǔn)出錯(cuò)決不會(huì)是全緩存的。使用setbuf()和setvbuf()可以更改緩存的類型在任何時(shí)刻,可以使用fflush強(qiáng)制刷新一個(gè)數(shù)據(jù)流定義:
#include<stdio.h>
int
fflush(FILE*fp);說(shuō)明:可強(qiáng)制刷新一個(gè)流。此函數(shù)使該流所有未寫的數(shù)據(jù)都被傳遞至內(nèi)核。標(biāo)準(zhǔn)I/O知識(shí)點(diǎn)4-stdin,stdout,stderr標(biāo)準(zhǔn)輸入0STDIN_FILENOstdin標(biāo)準(zhǔn)輸出1STDOUT_FILENOstdout標(biāo)準(zhǔn)錯(cuò)誤輸出2STDERR_FILENOstderr標(biāo)準(zhǔn)I/O預(yù)定義3個(gè)流,他們可以自動(dòng)地為進(jìn)程所使用定義函數(shù):intfprintf(FILE*stream,constchar*format,...);
函數(shù)說(shuō)明:fprintf()會(huì)根據(jù)參數(shù)format字符串來(lái)轉(zhuǎn)換并格式化數(shù)據(jù),然后將結(jié)果輸出到參數(shù)stream指定的文件中,直到出現(xiàn)字符串結(jié)束('\0')為止。Stream可以是表順輸入輸出流相關(guān)函數(shù):printf,fscanf,vfprintf
頭文件:#include<stdio.h>
stdin,stdout,stderr示例#include<stdio.h>
main()
{
inti=150;
intj=-100;
doublek=3.14159;
fprintf(stdout,"%d%f%x\n",j,k,i);
fprintf(stdout,"%2d%*d\n",i,2,i);
}
#include<stdio.h>
intmain()
{
inti;
if(freopen("D:OUTPUT.txt","w",stdout)==NULL)
fprintf(stderr,"errorredirecting\stdout\n");
for(i=0;i<10;i++)
printf("%3d",i);
printf("\n");
fclose(stdout);
return0;
}
文件stdIOSample1.c,實(shí)現(xiàn)了從stdout到一個(gè)文本文件的重定向。即,把輸出到屏幕的文本輸出到一個(gè)文本文件中。
標(biāo)準(zhǔn)I/O知識(shí)點(diǎn)5-打開流 下列三個(gè)函數(shù)可用于打開一個(gè)標(biāo)準(zhǔn)I/O流:FILE*fopen(constchar*path,constchar*mode);FILE*freopen(constchar*restrictpathname,constchar*restricttype,FILE*restrictfp)FILE*fdopen(intfiledes,constchar*type);fopen()打開由path指定的一個(gè)文件。mode的值如下:標(biāo)準(zhǔn)I/O-fopen()-mode參數(shù)打開標(biāo)準(zhǔn)I/O流的mode參數(shù):r或rb打開只讀文件,該文件必須存在。r+或r+b打開可讀寫的文件,該文件必須存在。w或wb打開只寫文件,若文件存在則文件長(zhǎng)度清為0,即會(huì)擦些文件以前內(nèi)容。若文件不存在則建立該文件。w+或w+b或wb+打開可讀寫文件,若文件存在則文件長(zhǎng)度清為零,即會(huì)擦些文件以前內(nèi)容。若文件不存在則建立該文件。a或ab以附加的方式打開只寫文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。a+或a+b或ab+以附加方式打開可讀寫的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留。*當(dāng)給定“b”參數(shù)時(shí),表示以二進(jìn)制方式打開文件。標(biāo)準(zhǔn)I/O-fopen()-mode參數(shù)打開一個(gè)標(biāo)準(zhǔn)I/O流的六種不同方式:標(biāo)準(zhǔn)I/O-fopen()-examplestdIOSample2.c:以讀寫方式打開文件file_3,如果該文件不存在,則創(chuàng)建。如果該文件已經(jīng)存在,則長(zhǎng)度截短為0。stdIOSample3c:以讀寫方式打開文件test.c,如果該文件不存在,則報(bào)錯(cuò)。如果該文件已經(jīng)存在,改變進(jìn)程的標(biāo)準(zhǔn)輸出,改標(biāo)準(zhǔn)輸出到test.c文件中。標(biāo)準(zhǔn)I/O-fopen()-example標(biāo)準(zhǔn)I/O-fopen()-example標(biāo)準(zhǔn)I/O庫(kù)-fopen()文件permissionfopen()沒有設(shè)定創(chuàng)建文件權(quán)限的參數(shù),POSIX.1要求具有如下權(quán)限(0666或者-rw-rw-rw):S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH用戶可以通過umask修改文件存取的權(quán)限,其結(jié)果為(0666&~umask)文件打開練習(xí)題設(shè)計(jì)c程序stdIOExercise1.c,實(shí)現(xiàn)以只讀的方式打開文件in.txt,以只寫方式打開out.txt,如果出現(xiàn)錯(cuò)誤,則打印錯(cuò)誤信息標(biāo)準(zhǔn)I/O知識(shí)點(diǎn)6-fclose()fclose()用于關(guān)閉一個(gè)已經(jīng)打開的流: intfclose(FILE*stream);fclose()調(diào)用成功返回0,失敗返回EOF,并設(shè)置errno在該文件被關(guān)閉之前,刷新緩存中的數(shù)據(jù)。如果標(biāo)準(zhǔn)I/O庫(kù)已經(jīng)為該流自動(dòng)分配了一個(gè)緩存,則釋放此緩存。當(dāng)一個(gè)進(jìn)程正常終止時(shí)(直接調(diào)用exit函數(shù),或從main函數(shù)返回),則所有帶未寫緩存數(shù)據(jù)的標(biāo)準(zhǔn)I/O流都被刷新,所有打開的標(biāo)準(zhǔn)I/O流都被關(guān)閉。在調(diào)用fclose()關(guān)閉流后對(duì)流所進(jìn)行的任何操作,包括再次調(diào)用fclose(),其結(jié)果都將是未知的。練習(xí):設(shè)計(jì)程序stdIOExercise2.c利用標(biāo)準(zhǔn)I/O函數(shù)來(lái)測(cè)試當(dāng)前系統(tǒng)最大能打開的文件個(gè)數(shù)。標(biāo)準(zhǔn)I/O知識(shí)點(diǎn)6-讀寫流調(diào)用fopen()成功打開流之后,可在三種不同類型的非格式化I/O中進(jìn)行選擇,對(duì)其進(jìn)行讀、寫操作:每次一個(gè)字符的I/O。使用fgetc()/fputc()一次讀或?qū)懸粋€(gè)字符,如果流是帶緩存的,則標(biāo)準(zhǔn)I/O函數(shù)處理所有緩存。每次一行的I/O。使用fgets()和fputs()一次讀或?qū)懸恍?。每行都以一個(gè)換行符終止。當(dāng)調(diào)用fgets()時(shí),應(yīng)說(shuō)明能處理的最大行長(zhǎng)。直接I/O。fread()和fwrite()函數(shù)支持這種類型的I/O。每次I/O操作讀或?qū)懩撤N數(shù)量的對(duì)象,而每個(gè)對(duì)象具有指定的長(zhǎng)度。這兩個(gè)函數(shù)常用于從二進(jìn)制文件中讀或?qū)懸粋€(gè)結(jié)構(gòu)。讀寫流結(jié)束判定feof()判斷文件是否結(jié)束,可用于二進(jìn)制文件。
intcTemp;while(!feof(fp)&&!ferror(stdin)){cTemp=fgetc(fp);}EOF/feof()EOF文件結(jié)束的返回標(biāo)志,一般使用方法: intcTemp;cTemp=fgetc(fp);while(cTemp!=EOF){cTemp=fgetc(infile);}讀寫流-字符I/O-輸入以下三個(gè)函數(shù)可用于一次讀一個(gè)字符:三個(gè)函數(shù)的返回:若成功則為下一個(gè)字符,若已處文件尾端或出錯(cuò)則為EOF函數(shù)getchar()等同于getc(stdin)注意,不管是出錯(cuò)還是到達(dá)文件尾端,這三個(gè)函數(shù)都返回同樣的值。為了區(qū)分這兩種不同的情況,必須調(diào)用ferror()或feof()。getc()的實(shí)現(xiàn)是一個(gè)宏,而fgetc()是一個(gè)函數(shù)。返回值為int類型。檢查文件出錯(cuò)函數(shù):在大多數(shù)的FILE對(duì)象的實(shí)現(xiàn)中,保留兩個(gè)標(biāo)志:出錯(cuò)標(biāo)志。文件結(jié)束標(biāo)志。讀寫流-字符I/O-輸入
內(nèi)部資料請(qǐng)勿COPY25以下三個(gè)函數(shù)可用于一次輸出一個(gè)字符:putchar(c)等價(jià)于putc(c,stdout)。出錯(cuò)返回EOF。
getc()/getchar()/putc()/putchar()實(shí)現(xiàn)為宏,fgetc()/fputc()實(shí)現(xiàn)為函數(shù),請(qǐng)根據(jù)情況選擇。讀寫流-字符I/O-example設(shè)計(jì)c程序stdIOSample4.c,example:循環(huán)從標(biāo)準(zhǔn)輸入(stdin)逐個(gè)字符讀入數(shù)據(jù),寫入一個(gè)文件,再把該文件內(nèi)容讀出顯示在屏幕上。//從文件中讀
rewind(fp);//將文件內(nèi)部位置指針從末尾移向開頭;
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}//向文件寫
ch=getchar();
while(ch!='/n')
{
fputc(ch,fp);
ch=getchar();
}讀寫流-行I/O-輸入下列兩個(gè)函數(shù)提供每次輸入一行的功能:兩個(gè)函數(shù)返回:若成功則為buf,若已處文件尾端或出錯(cuò)則為null這兩個(gè)函數(shù)都指定了緩存地址,讀入的行將送入其中。gets()從標(biāo)準(zhǔn)輸入讀,而fgets()則從指定的流讀。對(duì)于fgets(),必須指定緩存的長(zhǎng)度n。此函數(shù)一直讀到下一個(gè)換行符為止,但是不超過n-1個(gè)字符,讀入的字符被送入緩存。該緩存以null字符結(jié)尾。如若該行,包括最后一個(gè)換行符的字符數(shù)超過n-1,則只返回一個(gè)不完整的行,而且緩存總是以null字符結(jié)尾。對(duì)fgets()的下一次調(diào)用會(huì)繼續(xù)讀該行。gets()是一個(gè)不推薦使用的函數(shù),因?yàn)檎{(diào)用者在使用gets()時(shí)不能指定緩存的長(zhǎng)度,這樣就可能造成緩存越界(如若該行長(zhǎng)于緩存長(zhǎng)度),寫到緩存之后的存儲(chǔ)空間中,從而產(chǎn)生不可預(yù)料的后果。gets()與fgets()的另一個(gè)區(qū)別是,gets()并不將換行符存入緩存中。讀寫流-行I/O-輸出下列兩個(gè)函數(shù)提供每次輸出一行的功能:兩個(gè)函數(shù)返回:若成功則為非負(fù)值,若出錯(cuò)則為EOF函數(shù)fputs()將一個(gè)以null符終止的字符串寫到指定的流,終止符null不寫出。注意,這并不一定是每次輸出一行,因?yàn)樗⒉灰笤趎ull符之前一定是換行符。通常,在null符之前是一個(gè)換行符,但并不要求總是如此。puts()將一個(gè)以null符終止的字符串寫到標(biāo)準(zhǔn)輸出,終止符不寫出。但是,puts()然后又將一個(gè)換行符寫到標(biāo)準(zhǔn)輸出。puts()并不像它所對(duì)應(yīng)的gets()那樣不安全。但是我們還是應(yīng)避免使用它,以免需要記住它在最后又加上了一個(gè)換行符。如果總是使用fgets()和fputs(),那么就會(huì)熟知在每行終止處我們必須自己加一個(gè)換行符。讀寫流-行I/O-example設(shè)計(jì)c程序stdIOSample5.c,循環(huán)讀取output.txt的內(nèi)容,并輸出終端,然后再output.txt文件尾追加字符串“Clanguage”//讀字符串關(guān)鍵代碼if((fp=fopen(“output.txt","r"))==NULL)
{
printf("Cannotopenfilestrikeanykeyexit!");
getchar();
exit(1);
}
fgets(str,11,fp);
printf("%s/n",str);//追加字符串關(guān)鍵代碼
if((fp=fopen("output.txt",“a+"))==NULL)
{
printf("Cannotopenfilestrikeanykeyexit!");
getchar();
exit(1);
}
printf("inputastring:/n");
scanf("%s",st);
fputs(st,fp);
rewind(fp);讀寫流-二進(jìn)制I/O下列兩個(gè)函數(shù)以執(zhí)行二進(jìn)制I/O(directI/O)操作:兩個(gè)函數(shù)的返回:讀或?qū)懙膶?duì)象數(shù)對(duì)于二進(jìn)制數(shù)據(jù)我們更愿意一次讀或?qū)懻麄€(gè)結(jié)構(gòu)。為了使用getc()或putc()做到這一點(diǎn),必須循環(huán)讀取整個(gè)結(jié)構(gòu),一次讀或?qū)懸粋€(gè)字節(jié)。(效率低)fputs()在遇到null字節(jié)時(shí)就停止,而在結(jié)構(gòu)中可能含有null字節(jié),所以不能使用每次一行函數(shù)實(shí)現(xiàn)這種要求。如果輸入數(shù)據(jù)中包含有null字節(jié)或換行符,則fgets()也不能正確工作。(實(shí)現(xiàn)限制)讀寫流-二進(jìn)制I/O-example設(shè)計(jì)c程序stdIOSample6.c,建立一個(gè)test.dat文件,向里面寫3個(gè)數(shù)據(jù),數(shù)據(jù)類型如下列結(jié)構(gòu)提所示,從文件讀取這三個(gè)數(shù)據(jù),輸出到顯示屏
//結(jié)構(gòu)體定義structtest
{
charname[20];
intsize;
}wr[nmemb];/關(guān)鍵代碼fp=fopen(“test.dat","w");
fwrite(wr,sizeof(structtest),nmemb,fp);
fclose(fp);fp=fopen(“test.dat","r");
fread(re,sizeof(structtest),nmemb,fp);
fclose(fp);標(biāo)準(zhǔn)I/O–效率fgets()/fputs()/getc/putc調(diào)用代碼標(biāo)準(zhǔn)I/O–效率fgets()/fputs()/getc/putc效率對(duì)比圖標(biāo)準(zhǔn)I/O庫(kù)知識(shí)點(diǎn)7-定位流定位標(biāo)準(zhǔn)I/O流的兩種方式ftell()和fseek():這兩個(gè)函數(shù)自V7以來(lái)就存在了,但是它們都假定文件的位置可以存放在一個(gè)長(zhǎng)整型中。fgetpos()和fsetpos()。這兩個(gè)函數(shù)是新由ANSIC引入的。它們引進(jìn)了一個(gè)新的抽象數(shù)據(jù)類型fpos_t,它記錄文件的位置。需要移植到非UNIX系統(tǒng)上運(yùn)行的應(yīng)用程序應(yīng)當(dāng)使用fgetpos()和fsetpos()定位流-fseek()/ftell()/rewind()fseek()/ftell()/rewind()函數(shù)原型:ftell()用于取得當(dāng)前的文件位置,調(diào)用成功則為當(dāng)前文件位置指示,若出錯(cuò)則為-1Lfseek()用戶設(shè)定stream流的文件位置指示,調(diào)用成功返回0,失敗返回-1,并設(shè)置errnofseek()的whence參數(shù):SEEK_SET/SEEK_CUR/SEEK_END。rewind()用于設(shè)定流的文件位置指示為文件開始,該函數(shù)調(diào)用成功無(wú)返回值。rewind()等價(jià)于(void)fseek(stream,0L,SEEK_SET)定位流-fgetpos()/fsetpos()兩個(gè)函數(shù)返回:若成功則為0,若出錯(cuò)則為非0fgetpos()將文件位置指示器的當(dāng)前值存入由pos指向的對(duì)象中。在以后調(diào)用fsetpos()時(shí),可以使用此值將流重新定位至該位置。需要移植的程序,應(yīng)該優(yōu)先考慮fgetpos()/fsetpos()。fgetpos()/fsetpos()函數(shù)原型:標(biāo)準(zhǔn)I/O知識(shí)點(diǎn)8-臨時(shí)文件標(biāo)準(zhǔn)I/O庫(kù)提供了兩個(gè)函數(shù)以幫助創(chuàng)建臨時(shí)文件:tmpnam()產(chǎn)生一個(gè)與現(xiàn)在文件名不同的一個(gè)有效路徑名字符串。每次調(diào)用它時(shí),它都產(chǎn)生一個(gè)不同的路徑名。tmpnam()的s如果為NULL,則返回值存放到一個(gè)靜態(tài)的區(qū)中。如果s不為NULL,則認(rèn)為其指向長(zhǎng)度至少為L(zhǎng)_tmpnam個(gè)數(shù)的字符數(shù)組中。所產(chǎn)生的文件名存放到該數(shù)組中,也作為函數(shù)返回值返回。tmpfile()創(chuàng)建一個(gè)臨時(shí)二進(jìn)制文件(類型wb+),在關(guān)閉該文件或程序結(jié)束時(shí)將自動(dòng)刪除這種文件。標(biāo)準(zhǔn)I/O庫(kù)-臨時(shí)文件example設(shè)計(jì)c程序stdIOSample7.c,建立一個(gè)臨時(shí)文件。intmain()
{
chartmpname[L_tmpnam];
char*filename;
FILE*tmpfp;
filename=tmpnam(tmpname);
printf(“Temporaryfilenameis:%s\n”,filename);
tmpfp=tmpfile();
if(tmpfp)
printf(“OpenedatemporaryfileOK\n”);
else
perror(“tmpfile”);
exit(0);}練習(xí)題
設(shè)計(jì)程序stdIOExercise3.c:編程讀寫一個(gè)文件test.txt,每隔1秒向文件中寫入一行
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版臨時(shí)工炊事員聘用及職業(yè)健康檢查服務(wù)協(xié)議4篇
- 二零二五年度餐飲廚房設(shè)備維修保養(yǎng)及服務(wù)保障協(xié)議2篇
- 二零二五版建筑工程合同索賠時(shí)效與期限規(guī)定3篇
- 科技前沿學(xué)術(shù)文化節(jié)活動(dòng)策劃解析
- 科技創(chuàng)新與中小企業(yè)專利申請(qǐng)技巧
- 現(xiàn)代辦公環(huán)境下家長(zhǎng)的自我調(diào)節(jié)技巧
- 小學(xué)生數(shù)學(xué)競(jìng)賽輔導(dǎo)的多元化教學(xué)方法
- 水電與消防工程安裝2025年度合作協(xié)議5篇
- 教育行業(yè)的新篇章家庭教育中親子互動(dòng)的創(chuàng)新與實(shí)踐
- 二零二五版數(shù)據(jù)中心轉(zhuǎn)供電電費(fèi)補(bǔ)貼協(xié)議3篇
- 不同茶葉的沖泡方法
- 光伏發(fā)電并網(wǎng)申辦具體流程
- 建筑勞務(wù)專業(yè)分包合同范本(2025年)
- 年夜飯營(yíng)養(yǎng)分析報(bào)告
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制完整
- 食管癌的早期癥狀和手術(shù)治療
- 垃圾分類和回收利用課件
- 北侖區(qū)建筑工程質(zhì)量監(jiān)督站監(jiān)督告知書
- 法考客觀題歷年真題及答案解析卷一(第1套)
- 央國(guó)企信創(chuàng)白皮書 -基于信創(chuàng)體系的數(shù)字化轉(zhuǎn)型
- 6第六章 社會(huì)契約論.電子教案教學(xué)課件
評(píng)論
0/150
提交評(píng)論