




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1第八章文件文件系統(tǒng)概述標(biāo)準(zhǔn)文件操作1第八章文件文件系統(tǒng)概述21、文件
文件是存儲在外部存儲介質(zhì)上的信息的集合。
每個文件有唯一的文件名(主名.后綴)來標(biāo)識。計算機(jī)實現(xiàn)按名對文件進(jìn)行讀、寫等有關(guān)操作。
廣義上,操作系統(tǒng)將每一個與主機(jī)相聯(lián)的輸入輸出設(shè)備都看作是文件。(顯示器、打印機(jī)是輸出文件,鍵盤是輸入文件)。一、文件定義與分類文件系統(tǒng)概述21、文件文件是存儲在外部存儲介質(zhì)上的信息的集合。一、32、文件的分類
(1)按存儲介質(zhì):
磁盤文件、磁帶文件。(2)按文件的內(nèi)容:(從程序設(shè)計的角度看)
源程序、目標(biāo)文件、可執(zhí)行文件、數(shù)據(jù)文件。(3)按文件的編碼方式(存儲形式):
文本文件、二進(jìn)制文件。32、文件的分類(1)按存儲介質(zhì):(2)按文件的內(nèi)容:4二、數(shù)據(jù)文件的存儲形式1、字符文件(文本文件):每個字符用一個ASCII碼存儲(即一個字符占一個字節(jié))。2、二進(jìn)制文件:以數(shù)據(jù)在內(nèi)存中的形式原樣存于磁盤。如:一個短整數(shù)(short型),其二進(jìn)制文件存儲方式都是占2個字節(jié);而字符文件存儲方式所占字節(jié)數(shù)=該數(shù)的數(shù)字個數(shù)。
int型數(shù)
二進(jìn)制文件
字符文件
1262字節(jié)3字節(jié)
12682字節(jié)4字節(jié)4二、數(shù)據(jù)文件的存儲形式1、字符文件(文本文件):每個字符用5例如:整數(shù)1268文本文件形式‘1’的ASCII碼00110001001100100011011000111000二進(jìn)制文件形式00000100111101001268的二進(jìn)制數(shù)‘2’的ASCII碼‘6’的ASCII碼‘8’的ASCII碼5例如:整數(shù)1268文本文件形式‘1’的ASCII碼00116三.標(biāo)準(zhǔn)文件系統(tǒng)、非標(biāo)準(zhǔn)文件系統(tǒng)程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入輸入文件緩沖區(qū)輸出輸入磁盤內(nèi)存
非標(biāo)準(zhǔn)文件系統(tǒng):不使用緩沖區(qū)的磁盤文件系統(tǒng)標(biāo)準(zhǔn)c采用緩沖文件系統(tǒng),其原理圖如下:輸出6三.標(biāo)準(zhǔn)文件系統(tǒng)、非標(biāo)準(zhǔn)文件系統(tǒng)程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸74.文件存取方式在C語言中,文件的存取有兩種方式:(2)隨機(jī)存?。?)順序存取74.文件存取方式在C語言中,文件的存取有兩種方式:(2)隨8標(biāo)準(zhǔn)文件操作一、標(biāo)準(zhǔn)文件類型指針
每個被使用的文件都在內(nèi)存中開辟一個區(qū)域,用來存放文件的有關(guān)信息。這些信息是保存在一個結(jié)構(gòu)體類型的變量中。該結(jié)構(gòu)體類型是由系統(tǒng)定義的,取名為FILE。1.文件類型指針概述8標(biāo)準(zhǔn)文件操作一、標(biāo)準(zhǔn)文件類型指針每個被使用的文件9typedefstruct{shortlevel;unsignedflags;charfd;unsignedcharhild;shortbsize;unsignedchar*buffer;unsignedistemp;shorttoken;}FILE;FILE:一個標(biāo)準(zhǔn)的標(biāo)識符,但不是關(guān)鍵字9typedefstructFILE:10
如FILE*fp;fp是一個指向FILE類型結(jié)構(gòu)體的指針變量,通過該結(jié)構(gòu)體變量中的文件信息能夠訪問該文件。
如果有N個文件,一般應(yīng)設(shè)N個指針變量,使它們分別指向N個文件(確切地說,指向該文件的信息結(jié)構(gòu)體),以實現(xiàn)對文件的訪問。FILE*指針變量標(biāo)識符;2.文件型指針變量的定義10FILE*指針變量標(biāo)識符;2.文件型指針變量11標(biāo)準(zhǔn)文件操作的四個基本步驟:1.文件類型指針的定義2.打開標(biāo)準(zhǔn)文件3.標(biāo)準(zhǔn)文件的讀或?qū)懙牟僮?.標(biāo)準(zhǔn)文件的關(guān)閉操作11標(biāo)準(zhǔn)文件操作的四個基本步驟:1.文件類型指針的定義212打開文件對文件進(jìn)行讀或?qū)戧P(guān)閉文件文件的操作步驟文件打開函數(shù)文件讀寫函數(shù)文件關(guān)閉函數(shù)定義文件類型指針指針定義12打開文件對文件進(jìn)行讀或?qū)戧P(guān)閉文件文件的操作步驟文件打開函13二.標(biāo)準(zhǔn)文件的打開打開文件的含義
將文件信息從磁盤裝入計算機(jī)內(nèi)存,建立文件的各種有關(guān)信息,并使文件指針指向該文件,即建立文件類型指針與文件名之間的關(guān)聯(lián).2.文件的打開函數(shù):fopenfp=fopen(文件名,使用文件方式);函數(shù)原型:FILE*fopen(char*filename,char*mode);13二.標(biāo)準(zhǔn)文件的打開打開文件的含義將文件信14FILE類型指針----成功NULL----失敗fopen()函數(shù)的返回值應(yīng)賦給一個FILE指針變量,否則,此函數(shù)的返回值就會丟失,導(dǎo)致無法對此文件進(jìn)行操作。例如:FILE*fp;fp=fopen(”A1”,”r”);以上語句表示:要打開名字為A1的文件,使用文件的方式為“讀入”,fp指向A1文件。返回值:14FILE類型指針----成功fopen15文件打開函數(shù)的調(diào)用給編譯系統(tǒng)的三個信息:1.需要打開的文件名;2.使用文件的操作方式;3.讓哪一個指針變量指向被打開的文件。15文件打開函數(shù)的調(diào)用給編譯系統(tǒng)的三個信息:1.需要打開的16
”r”
(只讀)為輸入打開一個文本文件
”w”
(只寫)為輸出打開一個文本文件
”a”
(追加)向文本文件尾增加數(shù)據(jù)
”rb”
(只讀)為輸入打開一個二進(jìn)制文件
”wb”(只寫)為輸出打開一個二進(jìn)制文件
”ab”
(追加)向二進(jìn)制文件尾增加數(shù)據(jù)3.C語言文件操作方式r:read,w:write,a:append,b:binary,+:讀寫16”r”(只讀)為輸入打開一個文本文件3.C語17
”r+”
(讀寫)為讀/寫打開一個文本文件
”w+”
(讀寫)為讀/寫建立一個新的文本文件
”a+”
(讀寫)為讀/寫打開一個文本文件
”rb+”
(讀寫)為讀/寫打開一個二進(jìn)制文件
”wb+”(讀寫)為讀/寫建立一個新的二進(jìn)制文件
”ab+”(讀寫)為讀/寫打開一個二進(jìn)制文件C語言文件操作方式(續(xù))r:read,w:write,a:append,b:binary,+:讀寫17”r+”(讀寫)為讀/寫打開一個文本文件C語言文件18(1)用”r”方式打開的文件只能用于向計算機(jī)輸入數(shù)據(jù),而且該文件應(yīng)該已經(jīng)存在;
4.標(biāo)準(zhǔn)文件操作方式的說明(1-5)(2)用”w”方式打開的文件只能用于向該文件寫數(shù)據(jù),而不能用來向計算機(jī)輸入。
如果不存在該文件,則在打開時建立一個。
如果存在該文件,則新寫入的數(shù)據(jù)將覆蓋掉以前的數(shù)據(jù)。(3)
如果希望向文件末尾添加新的數(shù)據(jù)(不希望刪除原有數(shù)據(jù)),則應(yīng)該用”a”方式打開。18(1)用”r”方式打開的文件只能用于向計算機(jī)輸入數(shù)據(jù)19(4)
用”r+”、”w+”
、”a+”方式打開的文件可以用來輸入和輸出數(shù)據(jù)。(5)在程序開始運行時,系統(tǒng)自動打開三個標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入(stdin)、標(biāo)準(zhǔn)輸出(stdout)、標(biāo)準(zhǔn)出錯輸出(stderr)。4.標(biāo)準(zhǔn)文件操作方式的說明(1-5)19(4)用”r+”、”w+”、”a+”方式打開的20例:打開C盤根下的myfile.c文件,驗證文件能否正確打開.#include<stdio.h>voidmain(){FILE*fa;if((fa=fopen(”c:\\myfile.c”,”r”))==NULL){printf(“\nCannotopenthefile!”);exit(0);/*退出*/}else
printf(”\nOpen!”);}?提示:1.該文件在磁盤上不存在/存在時,比較運行結(jié)果。2.將程序中的”r”改為”w”,當(dāng)該文件在磁盤上不存在/存在時,比較運行結(jié)果。20例:打開C盤根下的myfile.c文件,驗證文件能否正確21三.標(biāo)準(zhǔn)文件的關(guān)閉函數(shù):fclose
關(guān)閉文件指針fp所指的文件,釋放相應(yīng)的文件信息區(qū).正常關(guān)閉文件時,函數(shù)返回值為0.函數(shù)原型:intfclose(FILE*fp);功能:
在使用完一個文件后應(yīng)該關(guān)閉它,以防止它再被誤用。21三.標(biāo)準(zhǔn)文件的關(guān)閉函數(shù):fclose22函數(shù)原型:四標(biāo)準(zhǔn)文件讀寫函數(shù)1.讀文件字符函數(shù):fgetcfp是指向所讀文件指針變量intfgetc(FILE*fp);函數(shù)功能:
從文件指針fp指向的文件當(dāng)前位置(位置指針)讀出一個字符,然后文件位置指針自動后移,指向文件中的下一個字符,返回值為讀入的字符.
若遇到文件結(jié)束符,則返回結(jié)束符EOF(-1).例:ch=fgetc(fp);22函數(shù)原型:四標(biāo)準(zhǔn)文件讀寫函數(shù)1.讀文件字符函數(shù):fg23例:將磁盤文件”mydata.txt”的信息讀出并顯示到屏幕上.(假設(shè)文件已經(jīng)存在,若不存在,可以用記事本或其它文本編輯器編輯一個)#include<stdio.h>voidmain(){FILE*fp;charc;if((fp=fopen(”mydata.txt”,”r”))==NULL) {printf(“\nFilenotexist!”);exit(0);}while((c=fgetc(fp)!=EOF)putchar(c);fclose(fp);}23例:將磁盤文件”mydata.txt”的信息讀出并顯示24例11.3編寫一個程序,實現(xiàn)DOS中的type命令的功能.#include<stdio.h>voidmain(intargc,char*argv[]){FILE*fp;charc;if(argc<2){printf(”\nNOfilename”);exit(0);}if((fp=fopen(”mydata.txt”,”r”))==NULL) {printf(”\nFilenotexist!”);exit(0);}while((c=fgetc(fp)!=EOF)putchar(c);fclose(fp);}24例11.3編寫一個程序,實現(xiàn)DOS中的type命令的252.文件寫入字符函數(shù):fputc函數(shù)返回值:輸出成功,返回值就是輸出的字符;輸出失敗,返回一個EOF(值為-1)。功能:把一個字符ch寫到fp指向的磁盤文件上去。函數(shù)原型:intfputc(intch,FILE*fp);例:FILE*fp;charch=’A’;…fputc(ch,fp)252.文件寫入字符函數(shù):fputc函數(shù)返回值:26putchar函數(shù)就是從fputc函數(shù)派生出來的。
putchar(c)是用#define定義的宏:
#defineputchar(c)fputc(c,stdout)
同理,getchar函數(shù)是從fgetc函數(shù)派生出來的。
getchar(c)是用#define定義的宏:
#definegetchar(c)fgetc(stdin)注26putchar函數(shù)就是從fputc函數(shù)派生出來的。27例11.4從鍵盤輸入一些字符存到一個磁盤文件data.dat中,以“#”結(jié)束。#include<stdio.h>voidmain(){FILE*fp;charc;if((fp=fopen(”data.dat”,”w”))==NULL) {printf(”\nFilecannotopen!”);exit(0);}while((c=getchar()!=”#”)fputc(c,fp);fclose(fp);}27例11.4從鍵盤輸入一些字符存到一個磁盤文件da28例11.5將文件filea.dat的內(nèi)容復(fù)制到文件fileb.dat中。#include<stdio.h>voidmain(){FILE*f1,*f2;if((f1=fopen(”filea.dat”,”r”))==NULL) {printf(”\nFilecannotopen!”);exit(0);}if((f2=fopen(”fileb.dat”,”w”))==NULL) {printf(”\nFilecannotcreat!”);exit(0);}while((c=fgetc(f1))!=EOF)fputc(c,f2);fclose(f1);fclose(f2);}28例11.5將文件filea.dat的內(nèi)容復(fù)制到文293.讀文件字符串函數(shù):fgets
從指針
fp指向的文件中讀取
len–1個字符,把它送到由指針buf指向的字符數(shù)組中。char*fgets(char*buf,intlen,FILE
*fp);函數(shù)原型:函數(shù)功能:字符數(shù)組的長度應(yīng)大于len,可存放len-1個字符,字符數(shù)組的最后一個元素為’\0’.若在讀入len-1個字符前遇到換行符’\n’或文件結(jié)束符號EOF,立即結(jié)束讀入操作.293.讀文件字符串函數(shù):fgets從指針30例11.6利用函數(shù)fgets,將文本文件filea.txt中的內(nèi)容全部讀出并顯示在屏幕上。分析:(1)一般地,文本文件以行為單位,每行最多80個字符,再加上一個行結(jié)束符號即換行符’\n’,則每行至少需要81個字節(jié)的存儲空間。(2)使用函數(shù)fgets讀取字符串時,若在讀入len-1個字符完成之前遇到換行符’\n’或文件結(jié)束符號EOF,立即結(jié)束讀入操作。無論讀入的字符是否等于或小于len-1個,函數(shù)為讀入的字符串之后加一個’\0’。因此,讀入的字符(包括’\0’)只有l(wèi)en個。(3)定義文件指針。(4)以只讀方式打開文件。(5)當(dāng)文件未結(jié)束時,反復(fù)讀出字符串并輸出。(6)關(guān)閉文件。30例11.6利用函數(shù)fgets,將文本文件file31#include<stdio.h>voidmain(){FILE*fp;
charstr[81];
if((fp=fopen(”aa.txt”,”rt”))==NULL){printf(”Cannotopenfile!”);
getchar();exit(1);
}while(fgets(str,81,fp)!=NULL)
puts(str);
fclose(fp);}例:利用函數(shù)fgets,將文本文件filea.txt中的內(nèi)容全部讀出并顯示在屏幕上。31#include<stdio.h>例:利用函數(shù)fge324.將字符串寫入文件的函數(shù):fputs()char*fputs(char*buf,FILE*fp);
把由指針buf指向的字符數(shù)組中的字符串寫入由指針
fp指向的文件中。buf
:字符串常量,字符數(shù)組名,指針變量函數(shù)原型:函數(shù)功能:324.將字符串寫入文件的函數(shù):fputs()ch#include<stdio.h>voidmain(){FILE*fp;charbuf[81];if((fp=fopen(”data.txt”,”a”))==NULL){printf(”Filecannotopen!”);exit(0);}while(fgets(buf,81,stdin)!=NULL)fputs(buf,fp);fclose(fp);}例從鍵盤輸入若干行字符,將它們添加到磁盤文件data.txt中.#include<stdio.h>例從鍵盤輸入若干行字345.數(shù)據(jù)塊讀寫函數(shù):fread和fwritebuffer:是一個指針。
對于fread,它是讀入數(shù)據(jù)的存放地址。
對于fwrite,是要輸出數(shù)據(jù)的地址(起始地址)。size:要讀寫的字節(jié)數(shù)。count:要進(jìn)行讀寫多少個size字節(jié)的數(shù)據(jù)項。fp:文件型指針。intfread(void*buffer,intsize,intcount,FILE*fp);intfwirte(void*buffer,intsize,intcount,FILE(fp);函數(shù)原型:345.數(shù)據(jù)塊讀寫函數(shù):fread和fwritebuffe35例11.8從鍵盤輸入兩個學(xué)生的信息,寫入磁盤文件student.dat中.分析:(1)建立學(xué)生信息的結(jié)構(gòu)體。(2)定義文件指針。(3)打開指定的文件。(4)將學(xué)生信息寫入文件。(5)關(guān)閉文件。35例11.8從鍵盤輸入兩個學(xué)生的信息,寫入磁盤文件stu36#include<stdio.h>sstructstudent{{charname[10];
intnum;
intage;
charaddr[15];}boy[2],*pp;#definesizesizeof(structstudent)36#include<stdio.h>37voidmain(){FILE*fp;
charch,filename[20];
inti;
gets(filename);
/*輸入文件名*/fp=fopen(filename,”wb+”);
/*以讀寫方式打開二進(jìn)制文件,也省略了檢測*/printf(”\ninputdata\n”);
pp=boy;
for(i=0;i<2;i++,pp++)/*輸入兩個學(xué)生的信息*/scanf(”%s%d%d%s”,pp->name,&pp->num,
&pp->age,pp->addr);
fwrite(boy,size,2,fp);
fclose(fp);}
/*將兩個學(xué)生的信息寫入文件*/37voidmain()/*將兩個學(xué)生的信息寫入文件*/38例11.9將磁盤文件student.dat中的學(xué)生信息輸出到屏幕上。
#include<stdio.h>structstu{charname[10];
intnum;
intage;
charaddr[15];}boy[2],*pp;#definesizesizeof(structstu)38例11.9將磁盤文件student.dat中的學(xué)生信息39voidmain(){FILE*fp;
charch,filename[20];
inti;
gets(filename);
pp=boy;
fp=fopen(filename,”wb+”);
printf(”\n\nname\tnumberageaddr\n”);
fread(pp,size,2,fp);
for(i=0;i<2;i++,pp++)printf(”%s\t%5d%7d%s\n”,pp->name,
&pp->num,&pp->age,pp->addr);
fclose(fp);}
39voidmain()40一般調(diào)用方式為:6.格式化寫讀函數(shù):fprintf和fscanffprintf(文件指針,格式字符串,輸出表列);fscanf(文件指針,格式字符串,輸入表列);
按照指定格式,向文件寫按照指定格式,從文件讀注意:fprintf和fscanf函數(shù)對磁盤文件讀寫
printf和scanf函數(shù)對顯示器或鍵盤操作.40一般調(diào)用方式為:6.格式化寫讀函數(shù):fprintf和f41例如:fscanf(fp,”%d,%f”,&i,&t);
按格式字符串規(guī)定的格式,從fp指定的文件中讀取數(shù)據(jù)分別送入變量i和t中.若磁盤文件上有以下字符:4,5.6則:4→i5.6→tfprintf(fp,”%d,%6.2f”,i,t);將整型變量i和實型變量t的值按%d和%6.2f的格式輸出到fp指向的文件上。如果i=5,t=5.8,則輸出到磁盤文件上的是以下的字符串:
5,5.8041例如:fscanf(fp,”%d,%f”,&i,&t)42例11.10按指定的格式,將學(xué)生信息寫入到一個二進(jìn)制文件stud.dat中.#include<stdio.h>structstudent{charname[10];
intnum;
intage;
charaddr[15];}boy[2],*pp;voidmain(){FILE*fp;
charch,filename[20];
inti;
gets(filename);
pp=boya;if((fp=fopen(filename,”wb+”))==NULL){printf(”Cannotopenfile!”);getch();exit(1);}printf”\ninputdata\n”);for(i=0;i<2;i++,pp++)scanf(”%s%d%d%s”,pp->name,&pp->num,&pp->age,pp->addr);pp=boya;for(i=0;i<2;i++,qq++)fprintf(fp,"%s%d%d%s\n",qq->name,&qq->num,&qq->age,qq->addr);fclose(fp);}42例11.10按指定的格式,將學(xué)生信息寫入到一個二進(jìn)制43例11.11從文件stud.dat中,按指定的格式,將學(xué)生信息讀出并顯示到屏幕上.#include<stdio.h>voidmain(){FILE*fp;
charch,
filename[20];
inti;
structstudentboy[2],*pp;
printf(”\nfilename:”);
gets(filename);
fp=fopen(filename,”rb+”);for(i=0;i<2;i++,pp++)fscanf(fp,”%s%d%d%s\n”,pp->name,&pp->num,
&pp->age,pp->addr);printf(”\n\nname\tnumberageaddr\n”);pp=boy;for(i=0;i<2;i++,pp++)printf(”%s\t%5d%7d%s\n”,pp->name,pp->num,pp->age,
pp->addr);fclose(fp);}程序中結(jié)構(gòu)體的說明參考例11.843例11.11從文件stud.dat中,按指定的格式44五文件的隨機(jī)讀寫
移動文件位置指針的操作稱為文件的定位.
實現(xiàn)隨機(jī)讀寫的關(guān)鍵是要按指定的條件進(jìn)行文件的定位操作。文件定位操作是通過庫函數(shù)的調(diào)用來完成的。
在每個打開的文件中,有一個文件位置指針,它指向?qū)⒁x寫的字符位置。當(dāng)對文件進(jìn)行順序讀寫時,每讀完一個字符,該位置指針就自動移到下一個字符位置。
在實際問題中,常要求讀寫文件中某些指定的部分。為了避免不必要的讀或?qū)懙牟僮?,可先移動文件的位置指針到需要讀寫的位置,再進(jìn)行讀寫,這種讀寫操作方式稱為隨機(jī)讀寫。定位隨機(jī)讀寫順序讀寫44五文件的隨機(jī)讀寫移動文件位置指針的操作稱為文件451.文件指針定位函數(shù):rewind函數(shù)原型:intrewind(FILE*fp);函數(shù)功能:把文件指針fp指向文件的內(nèi)部位置指針移到文件首。2.文件指針定位函數(shù):fseek函數(shù)原型:intfseek(FILE*fp,longoffset,intpos);函數(shù)功能:將文件指針fp指向文件的內(nèi)部位置指針從pos指定的位置開始移動offset個字節(jié)。451.文件指針定位函數(shù):rewind函數(shù)原型:2.文件指46起始點表示方法起始點表示符號數(shù)字表示文件首當(dāng)前位置文件末尾SEEK_SETSEEK_CURSEEK_END012offset為位移量,表示移動的字節(jié)數(shù),要求位移量是long型數(shù)據(jù),以便在文件長度大于64KB時不會出錯,當(dāng)用常量表示位移量時,要求加后綴“l(fā)”或“L”.
若offset為負(fù)數(shù),表示向文件首方向移動,否則是向文件尾方向移動;pos為起始點,表示從何處開始計算位移量,規(guī)定的起始點有三種:文件首,當(dāng)前位置和文件尾.46起始點表示方法起始點表示符號數(shù)字表示文件首SEEK_SE47例如:fseek(fp,100L,0);
文件指針從文件開始處向后移動100個字節(jié)fseek(fp,60L,1);
文件指針從當(dāng)前位置向后移動60個字節(jié)fseek(fp,-10L,2);
文件指針從文件末尾處向前移動10個字節(jié)注意:位移量一般被要求是long型數(shù)據(jù),這樣當(dāng)文件的長度大于64K時不致出問題。47例如:注意:位移量一般被要求是long型數(shù)據(jù),這樣當(dāng)48#include“stdio.h”voidmain(){FILE*fp1,*fp2;
fp1=fopen(”file1.c”,”r”);fp2=fopen(”file2.c”,”w”);
while(!feof(fp1))putchar(getc(fp1));rewind(fp1);while(!feof(p1))putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);}例11.12
有一個磁盤文件,第一次使它顯示在屏幕上,第二次把它復(fù)制到另一文件上。48#include“stdio.h”例11.1249例11.13在磁盤文件上存有10個學(xué)生的數(shù)據(jù)。要求將第1、3、5、7、9個學(xué)生數(shù)據(jù)輸入計算機(jī),并在屏幕上顯示出來。
#include<stdio.h>structstudent_type{charname[10];intnum;intage;charsex;}stud[10];49例11.13在磁盤文件上存有10個學(xué)生的數(shù)據(jù)。要求將50voidmain(){inti;FILE*fp;if((fp=fopen("stud.dat","rb"))==NULL){printf("cannotopenfile\n");exit(0);}
50voidmain()51for(i=0;i<10;i+=2){fseek(fp,i*sizeof(structstudent_type),0);fread(&stud[i],sizeof(structstudent_type),1,fp);printf(“%s%d%d%c\n”,stud[i].name,stud[i].num,tud[i].age,stud[i].sex);}fclose(fp);}51for(i=0;i<10;i+=2)52六.文件的檢測函數(shù)1.文件結(jié)束檢測函數(shù)feof函數(shù)原型:intfeof(FILE*fp);函數(shù)功能:判斷fp指向的文件是否處于文件結(jié)束位置,如文件結(jié)束,則返回值為1,否則為0。2.文件出錯檢測函數(shù)ferror函數(shù)原型:intferror(FILE*fp);函數(shù)功能:檢查文件fp在用各種輸入輸出函數(shù)進(jìn)行讀寫時是否出錯。若出錯,返回值為1,否則返回0。3.文件出錯標(biāo)志和文件結(jié)束標(biāo)志置0函數(shù)clearerr函數(shù)函數(shù)原型:intclearerr(FILE*fp);函數(shù)功能:用于清除出錯標(biāo)志和文件結(jié)束標(biāo)志,使它們?yōu)?值。52六.文件的檢測函數(shù)1.文件結(jié)束檢測函數(shù)feof25312.3非標(biāo)準(zhǔn)文件操作標(biāo)準(zhǔn)文件的輸入和輸出稱為高層I/O。非標(biāo)準(zhǔn)文件的輸入和輸出稱為低層I/O。在非標(biāo)準(zhǔn)文件系統(tǒng)中系統(tǒng)不會自動提供文件緩沖區(qū)沒有FILE文件指針讀寫文件時和文件聯(lián)系的是一個整數(shù),稱為文件號5312.3非標(biāo)準(zhǔn)文件操作標(biāo)準(zhǔn)文件的輸入和輸出稱為高層I/54一.非標(biāo)準(zhǔn)文件的打開、關(guān)閉
1.打開文件函數(shù)open函數(shù)原型:intopen(char*filename,intmode);函數(shù)功能:按mode指定的方式打開名為filename的文件,打開成功,函數(shù)返回一個正整數(shù)稱為文件號,否則返回-1。filename是任意DOS文件名,可以是字符串常量或變量;mode是打開方式,可以用相應(yīng)的符號常量或文件號.
常用mode打開方式含義宏名文件號O_RDONLYO_WRONLYO_RDWR124以只讀方式打開一個文件以只寫方式打開一個文件以讀寫方式打開一個文件54一.非標(biāo)準(zhǔn)文件的打開、關(guān)閉1.打開文件函數(shù)open55例如:fp=open(”ABC”,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 園林建設(shè)專項施工方案
- 2024年廣東省中考滿分作文《當(dāng)好自己故事的主角》3
- 合作商超協(xié)議合同范本
- 胃造口術(shù)后護(hù)理
- 農(nóng)莊永久出售合同范例
- 交運股合同范例
- 制定高效的日常生產(chǎn)計劃
- 加強(qiáng)知識管理的有效方式計劃
- 品牌數(shù)字化轉(zhuǎn)型的路徑與挑戰(zhàn)計劃
- 項目管理的最佳實踐計劃
- 2025年安徽電氣工程職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫學(xué)生專用
- 2025年皖西衛(wèi)生職業(yè)學(xué)院單招職業(yè)技能測試題庫審定版
- unctad -全球投資趨勢監(jiān)測 第 48 期 Global Investment Trends Monitor,No. 48
- 2025年福建省高職單招計算機(jī)類職業(yè)技能測試題及答案(供參考)
- 電鍍園區(qū)現(xiàn)場管理
- 七年級歷史下冊 第一單元 綜合測試卷(人教福建版 2025年春)
- 學(xué)校在鑄牢中華民族共同體意識教育工作情況報告
- 2025年安徽淮北市建投控股集團(tuán)招聘筆試參考題庫含答案解析
- 《孤獨的小螃蟹》導(dǎo)讀課件
- 城市軌道交通行車組織 課件 項目3 車站行車作業(yè)組織
- 2025年湘教版初中地理七年級下冊重點知識點梳理與歸納
評論
0/150
提交評論