我的建議是去看MSDN,里面有詳細(xì)的庫函數(shù)的說明和使用方法。C的庫函數(shù)有很多,一條條說不現(xiàn)實(shí),就是一個(gè)專業(yè)的程序員也不可能將庫函數(shù)都記下來。我從網(wǎng)上搜了點(diǎn)庫函數(shù)的用法,你看看吧。還是那句話,想了解庫函數(shù),還是看MSDN。
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的阜寧網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
下面也是我從網(wǎng)上找到的。網(wǎng)上這種東西很多。但我認(rèn)為要是真正精通,還是MSDN
文件的打開(fopen函數(shù))
fopen函數(shù)用來打開一個(gè)文件,其調(diào)用的一般形式為:
文件指針名=fopen(文件名,使用文件方式);
其中,
“文件指針名”必須是被說明為FILE 類型的指針變量;
“文件名”是被打開文件的文件名;
“使用文件方式”是指文件的類型和操作要求。
“文件名”是字符串常量或字符串?dāng)?shù)組。
例如:
FILE *fp;
fp=("file a","r");
其意義是在當(dāng)前目錄下打開文件file a,只允許進(jìn)行“讀”操作,并使fp指向該文件。
又如:
FILE *fphzk
fphzk=("c:\\hzk16","rb")
其意義是打開C驅(qū)動(dòng)器磁盤的根目錄下的文件hzk16,這是一個(gè)二進(jìn)制文件,只允許按二進(jìn)制方式進(jìn)行讀操作。兩個(gè)反斜線“\\ ”中的第一個(gè)表示轉(zhuǎn)義字符,第二個(gè)表示根目錄。
使用文件的方式共有12種,下面給出了它們的符號(hào)和意義。
文件使用方式
意義
“rt”
只讀打開一個(gè)文本文件,只允許讀數(shù)據(jù)
“wt”
只寫打開或建立一個(gè)文本文件,只允許寫數(shù)據(jù)
“at”
追加打開一個(gè)文本文件,并在文件末尾寫數(shù)據(jù)
“rb”
只讀打開一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)
“wb”
只寫打開或建立一個(gè)二進(jìn)制文件,只允許寫數(shù)據(jù)
“ab”
追加打開一個(gè)二進(jìn)制文件,并在文件末尾寫數(shù)據(jù)
“rt+”
讀寫打開一個(gè)文本文件,允許讀和寫
“wt+”
讀寫打開或建立一個(gè)文本文件,允許讀寫
“at+”
讀寫打開一個(gè)文本文件,允許讀,或在文件末追加數(shù)據(jù)
“rb+”
讀寫打開一個(gè)二進(jìn)制文件,允許讀和寫
“wb+”
讀寫打開或建立一個(gè)二進(jìn)制文件,允許讀和寫
“ab+”
讀寫打開一個(gè)二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)
對(duì)于文件使用方式有以下幾點(diǎn)說明:
1) 文件使用方式由r,w,a,t,b,+六個(gè)字符拼成,各字符的含義是:
r(read): 讀
w(write): 寫
a(append): 追加
t(text): 文本文件,可省略不寫
b(banary): 二進(jìn)制文件
+: 讀和寫
2) 凡用“r”打開一個(gè)文件時(shí),該文件必須已經(jīng)存在,且只能從該文件讀出。
3) 用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個(gè)新文件。
4) 若要向一個(gè)已存在的文件追加新的信息,只能用“a”方式打開文件。但此時(shí)該文件必須是存在的,否則將會(huì)出錯(cuò)。
5) 在打開一個(gè)文件時(shí),如果出錯(cuò),fopen將返回一個(gè)空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應(yīng)的處理。因此常用以下程序段打開文件:
6) if((fp=fopen("c:\\hzk16","rb")==NULL)
{
printf("\nerror on open c:\\hzk16 file!");
getch();
exit(1);
}
這段程序的意義是,如果返回的指針為空,表示不能打開C盤根目錄下的hzk16文件,則給出提示信息“error on open c:\ hzk16 file!”,下一行g(shù)etch()的功能是從鍵盤輸入一個(gè)字符,但不在屏幕上顯示。在這里,該行的作用是等待,只有當(dāng)用戶從鍵盤敲任一鍵時(shí),程序才繼續(xù)執(zhí)行,因此用戶可利用這個(gè)等待時(shí)間閱讀出錯(cuò)提示。敲鍵后執(zhí)行exit(1)退出程序。
7) 把一個(gè)文本文件讀入內(nèi)存時(shí),要將ASCII碼轉(zhuǎn)換成二進(jìn)制碼,而把文件以文本方式寫入磁盤時(shí),也要把二進(jìn)制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫要花費(fèi)較多的轉(zhuǎn)換時(shí)間。對(duì)二進(jìn)制文件的讀寫不存在這種轉(zhuǎn)換。
8) 標(biāo)準(zhǔn)輸入文件(鍵盤),標(biāo)準(zhǔn)輸出文件(顯示器),標(biāo)準(zhǔn)出錯(cuò)輸出(出錯(cuò)信息)是由系統(tǒng)打開的,可直接使用。
13.3.2 文件關(guān)閉函數(shù)(fclose函數(shù))
文件一旦使用完畢,應(yīng)用關(guān)閉文件函數(shù)把文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯(cuò)誤。
fclose函數(shù)調(diào)用的一般形式是:
fclose(文件指針);
例如:
fclose(fp);
正常完成關(guān)閉文件操作時(shí),fclose函數(shù)返回值為0。如返回非零值則表示有錯(cuò)誤發(fā)生。
13.4 文件的讀寫
對(duì)文件的讀和寫是最常用的文件操作。在C語言中提供了多種文件讀寫的函數(shù):
·字符讀寫函數(shù) :fgetc和fputc
·字符串讀寫函數(shù):fgets和fputs
·數(shù)據(jù)塊讀寫函數(shù):freed和fwrite
·格式化讀寫函數(shù):fscanf和fprinf
下面分別予以介紹。使用以上函數(shù)都要求包含頭文件stdio.h。
13.4.1 字符讀寫函數(shù)fgetc和fputc
字符讀寫函數(shù)是以字符(字節(jié))為單位的讀寫函數(shù)。每次可從文件讀出或向文件寫入一個(gè)字符。
1. 讀字符函數(shù)fgetc
fgetc函數(shù)的功能是從指定的文件中讀一個(gè)字符,函數(shù)調(diào)用的形式為:
字符變量=fgetc(文件指針);
例如:
ch=fgetc(fp);
其意義是從打開的文件fp中讀取一個(gè)字符并送入ch中。
對(duì)于fgetc函數(shù)的使用有以下幾點(diǎn)說明:
1) 在fgetc函數(shù)調(diào)用中,讀取的文件必須是以讀或讀寫方式打開的。
2) 讀取字符的結(jié)果也可以不向字符變量賦值,
例如:
fgetc(fp);
但是讀出的字符不能保存。
3) 在文件內(nèi)部有一個(gè)位置指針。用來指向文件的當(dāng)前讀寫字節(jié)。在文件打開時(shí),該指針總是指向文件的第一個(gè)字節(jié)。使用fgetc 函數(shù)后,該位置指針將向后移動(dòng)一個(gè)字節(jié)。 因此可連續(xù)多次使用fgetc函數(shù),讀取多個(gè)字符。應(yīng)注意文件指針和文件內(nèi)部的位置指針不是一回事。文件指針是指向整個(gè)文件的,須在程序中定義說明,只要不重新賦值,文件指針的值是不變的。文件內(nèi)部的位置指針用以指示文件內(nèi)部的當(dāng)前讀寫位置,每讀寫一次,該指針均向后移動(dòng),它不需在程序中定義說明,而是由系統(tǒng)自動(dòng)設(shè)置的。
【例13.1】讀入文件c1.doc,在屏幕上輸出。
#includestdio.h
main()
{
FILE *fp;
char ch;
if((fp=fopen("d:\\jrzh\\example\\c1.txt","rt"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}
本例程序的功能是從文件中逐個(gè)讀取字符,在屏幕上顯示。程序定義了文件指針fp,以讀文本文件方式打開文件“d:\\jrzh\\example\\ex1_1.c”,并使fp指向該文件。如打開文件出錯(cuò),給出提示并退出程序。程序第12行先讀出一個(gè)字符,然后進(jìn)入循環(huán),只要讀出的字符不是文件結(jié)束標(biāo)志(每個(gè)文件末有一結(jié)束標(biāo)志EOF)就把該字符顯示在屏幕上,再讀入下一字符。每讀一次,文件內(nèi)部的位置指針向后移動(dòng)一個(gè)字符,文件結(jié)束時(shí),該指針指向EOF。執(zhí)行本程序?qū)@示整個(gè)文件。
2. 寫字符函數(shù)fputc
fputc函數(shù)的功能是把一個(gè)字符寫入指定的文件中,函數(shù)調(diào)用的形式為:
fputc(字符量,文件指針);
其中,待寫入的字符量可以是字符常量或變量,例如:
fputc('a',fp);
其意義是把字符a寫入fp所指向的文件中。
對(duì)于fputc函數(shù)的使用也要說明幾點(diǎn):
1) 被寫入的文件可以用寫、讀寫、追加方式打開,用寫或讀寫方式打開一個(gè)已存在的文件時(shí)將清除原有的文件內(nèi)容,寫入字符從文件首開始。如需保留原有文件內(nèi)容,希望寫入的字符以文件末開始存放,必須以追加方式打開文件。被寫入的文件若不存在,則創(chuàng)建該文件。
2) 每寫入一個(gè)字符,文件內(nèi)部位置指針向后移動(dòng)一個(gè)字節(jié)。
3) fputc函數(shù)有一個(gè)返回值,如寫入成功則返回寫入的字符,否則返回一個(gè)EOF。可用此來判斷寫入是否成功。
【例13.2】從鍵盤輸入一行字符,寫入一個(gè)文件,再把該文件內(nèi)容讀出顯示在屏幕上。
#includestdio.h
main()
{
FILE *fp;
char ch;
if((fp=fopen("d:\\jrzh\\example\\string","wt+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("input a string:\n");
ch=getchar();
while (ch!='\n')
{
fputc(ch,fp);
ch=getchar();
}
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
}
程序中第6行以讀寫文本文件方式打開文件string。程序第13行從鍵盤讀入一個(gè)字符后進(jìn)入循環(huán),當(dāng)讀入字符不為回車符時(shí),則把該字符寫入文件之中,然后繼續(xù)從鍵盤讀入下一字符。每輸入一個(gè)字符,文件內(nèi)部位置指針向后移動(dòng)一個(gè)字節(jié)。寫入完畢,該指針已指向文件末。如要把文件從頭讀出,須把指針移向文件頭,程序第19行rewind函數(shù)用于把fp所指文件的內(nèi)部位置指針移到文件頭。第20至25行用于讀出文件中的一行內(nèi)容。
【例13.3】把命令行參數(shù)中的前一個(gè)文件名標(biāo)識(shí)的文件,復(fù)制到后一個(gè)文件名標(biāo)識(shí)的文件中,如命令行中只有一個(gè)文件名則把該文件寫到標(biāo)準(zhǔn)輸出文件(顯示器)中。
#includestdio.h
main(int argc,char *argv[])
{
FILE *fp1,*fp2;
char ch;
if(argc==1)
{
printf("have not enter file name strike any key exit");
getch();
exit(0);
}
if((fp1=fopen(argv[1],"rt"))==NULL)
{
printf("Cannot open %s\n",argv[1]);
getch();
exit(1);
}
if(argc==2) fp2=stdout;
else if((fp2=fopen(argv[2],"wt+"))==NULL)
{
printf("Cannot open %s\n",argv[1]);
getch();
exit(1);
}
while((ch=fgetc(fp1))!=EOF)
fputc(ch,fp2);
fclose(fp1);
fclose(fp2);
}
本程序?yàn)閹⒌膍ain函數(shù)。程序中定義了兩個(gè)文件指針fp1和fp2,分別指向命令行參數(shù)中給出的文件。如命令行參數(shù)中沒有給出文件名,則給出提示信息。程序第18行表示如果只給出一個(gè)文件名,則使fp2指向標(biāo)準(zhǔn)輸出文件(即顯示器)。程序第25行至28行用循環(huán)語句逐個(gè)讀出文件1中的字符再送到文件2中。再次運(yùn)行時(shí),給出了一個(gè)文件名,故輸出給標(biāo)準(zhǔn)輸出文件stdout,即在顯示器上顯示文件內(nèi)容。第三次運(yùn)行,給出了二個(gè)文件名,因此把string中的內(nèi)容讀出,寫入到OK之中。可用DOS命令type顯示OK的內(nèi)容。
13.4.2 字符串讀寫函數(shù)fgets和fputs
1. 讀字符串函數(shù)fgets
函數(shù)的功能是從指定的文件中讀一個(gè)字符串到字符數(shù)組中,函數(shù)調(diào)用的形式為:
fgets(字符數(shù)組名,n,文件指針);
其中的n是一個(gè)正整數(shù)。表示從文件中讀出的字符串不超過 n-1個(gè)字符。在讀入的最后一個(gè)字符后加上串結(jié)束標(biāo)志'\0'。
例如:
fgets(str,n,fp);
的意義是從fp所指的文件中讀出n-1個(gè)字符送入字符數(shù)組str中。
【例13.4】從string文件中讀入一個(gè)含10個(gè)字符的字符串。
#includestdio.h
main()
{
FILE *fp;
char str[11];
if((fp=fopen("d:\\jrzh\\example\\string","rt"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
fgets(str,11,fp);
printf("\n%s\n",str);
fclose(fp);
}
本例定義了一個(gè)字符數(shù)組str共11個(gè)字節(jié),在以讀文本文件方式打開文件string后,從中讀出10個(gè)字符送入str數(shù)組,在數(shù)組最后一個(gè)單元內(nèi)將加上'\0',然后在屏幕上顯示輸出str數(shù)組。輸出的十個(gè)字符正是例13.1程序的前十個(gè)字符。
對(duì)fgets函數(shù)有兩點(diǎn)說明:
1) 在讀出n-1個(gè)字符之前,如遇到了換行符或EOF,則讀出結(jié)束。
2) fgets函數(shù)也有返回值,其返回值是字符數(shù)組的首地址。
2. 寫字符串函數(shù)fputs
fputs函數(shù)的功能是向指定的文件寫入一個(gè)字符串,其調(diào)用形式為:
fputs(字符串,文件指針);
其中字符串可以是字符串常量,也可以是字符數(shù)組名,或指針變量,例如:
fputs(“abcd“,fp);
其意義是把字符串“abcd”寫入fp所指的文件之中。
【例13.5】在例13.2中建立的文件string中追加一個(gè)字符串。
#includestdio.h
main()
{
FILE *fp;
char ch,st[20];
if((fp=fopen("string","at+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("input a string:\n");
scanf("%s",st);
fputs(st,fp);
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
}
本例要求在string文件末加寫字符串,因此,在程序第6行以追加讀寫文本文件的方式打開文件string。然后輸入字符串,并用fputs函數(shù)把該串寫入文件string。在程序15行用rewind函數(shù)把文件內(nèi)部位置指針移到文件首。再進(jìn)入循環(huán)逐個(gè)顯示當(dāng)前文件中的全部內(nèi)容。
13.4.3 數(shù)據(jù)塊讀寫函數(shù)fread和fwtrite
C語言還提供了用于整塊數(shù)據(jù)的讀寫函數(shù)。可用來讀寫一組數(shù)據(jù),如一個(gè)數(shù)組元素,一個(gè)結(jié)構(gòu)變量的值等。
讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:
fread(buffer,size,count,fp);
寫數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:
fwrite(buffer,size,count,fp);
其中:
buffer 是一個(gè)指針,在fread函數(shù)中,它表示存放輸入數(shù)據(jù)的首地址。在fwrite函數(shù)中,它表示存放輸出數(shù)據(jù)的首地址。
size 表示數(shù)據(jù)塊的字節(jié)數(shù)。
count 表示要讀寫的數(shù)據(jù)塊塊數(shù)。
fp 表示文件指針。
例如:
fread(fa,4,5,fp);
其意義是從fp所指的文件中,每次讀4個(gè)字節(jié)(一個(gè)實(shí)數(shù))送入實(shí)數(shù)組fa中,連續(xù)讀5次,即讀5個(gè)實(shí)數(shù)到fa中。
【例13.6】從鍵盤輸入兩個(gè)學(xué)生數(shù)據(jù),寫入一個(gè)文件中,再讀出這兩個(gè)學(xué)生的數(shù)據(jù)顯示在屏幕上。
#includestdio.h
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("d:\\jrzh\\example\\stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("\ninput data\n");
for(i=0;i2;i++,pp++)
scanf("%s%d%d%s",pp-name,pp-num,pp-age,pp-addr);
pp=boya;
fwrite(pp,sizeof(struct stu),2,fp);
rewind(fp);
fread(qq,sizeof(struct stu),2,fp);
printf("\n\nname\tnumber age addr\n");
for(i=0;i2;i++,qq++)
printf("%s\t%5d%7d %s\n",qq-name,qq-num,qq-age,qq-addr);
fclose(fp);
}
本例程序定義了一個(gè)結(jié)構(gòu)stu,說明了兩個(gè)結(jié)構(gòu)數(shù)組boya和boyb以及兩個(gè)結(jié)構(gòu)指針變量pp和qq。pp指向boya,qq指向boyb。程序第16行以讀寫方式打開二進(jìn)制文件“stu_list”,輸入二個(gè)學(xué)生數(shù)據(jù)之后,寫入該文件中,然后把文件內(nèi)部位置指針移到文件首,讀出兩塊學(xué)生數(shù)據(jù)后,在屏幕上顯示。
------
回復(fù)此文章 |
回復(fù)主題:Re:c語言文件操作 | 作者: haohao | 軍銜:六級(jí)軍士 | 發(fā)表時(shí)間:2004-07-28 11:08:47
下午應(yīng)該把這個(gè)搞定了.
------
回復(fù)此文章 |
回復(fù)主題:Re:Re:c語言文件操作 | 作者: haohao | 軍銜:六級(jí)軍士 | 發(fā)表時(shí)間:2004-07-28 11:10:23
13.7 C庫文件
C系統(tǒng)提供了豐富的系統(tǒng)文件,稱為庫文件,C的庫文件分為兩類,一類是擴(kuò)展名為".h"的文件,稱為頭文件,在前面的包含命令中我們已多次使用過。在".h"文件中包含了常量定義、類型定義、宏定義、函數(shù)原型以及各種編譯選擇設(shè)置等信息。另一類是函數(shù)庫,包括了各種函數(shù)的目標(biāo)代碼,供用戶在程序中調(diào)用。 通常在程序中調(diào)用一個(gè)庫函數(shù)時(shí),要在調(diào)用之前包含該函數(shù)原型所在的".h" 文件。
下面給出Turbo C的全部".h"文件。
Turbo C頭文件
n ALLOC.H 說明內(nèi)存管理函數(shù)(分配、釋放等)。
n ASSERT.H 定義 assert調(diào)試宏。
n BIOS.H 說明調(diào)用IBM—PC ROM BIOS子程序的各個(gè)函數(shù)。
n CONIO.H 說明調(diào)用DOS控制臺(tái)I/O子程序的各個(gè)函數(shù)。
n CTYPE.H 包含有關(guān)字符分類及轉(zhuǎn)換的名類信息(如 isalpha和toascii等)。
n DIR.H 包含有關(guān)目錄和路徑的結(jié)構(gòu)、宏定義和函數(shù)。
n DOS.H 定義和說明MSDOS和8086調(diào)用的一些常量和函數(shù)。
n ERRON.H 定義錯(cuò)誤代碼的助記符。
n FCNTL.H 定義在與open庫子程序連接時(shí)的符號(hào)常量。
n FLOAT.H 包含有關(guān)浮點(diǎn)運(yùn)算的一些參數(shù)和函數(shù)。
n GRAPHICS.H 說明有關(guān)圖形功能的各個(gè)函數(shù),圖形錯(cuò)誤代碼的常量定義,正對(duì)不同驅(qū)動(dòng)程序的各種顏色值,及函數(shù)用到的一些特殊結(jié)構(gòu)。
n IO.H 包含低級(jí)I/O子程序的結(jié)構(gòu)和說明。
n LIMIT.H 包含各環(huán)境參數(shù)、編譯時(shí)間限制、數(shù)的范圍等信息。
n MATH.H 說明數(shù)學(xué)運(yùn)算函數(shù),還定了 HUGE VAL 宏, 說明了matherr和matherr子程序用到的特殊結(jié)構(gòu)。
n MEM.H 說明一些內(nèi)存操作函數(shù)(其中大多數(shù)也在STRING.H中說明)。
n PROCESS.H 說明進(jìn)程管理的各個(gè)函數(shù),spawn…和EXEC …函數(shù)的結(jié)構(gòu)說明。
n SETJMP.H 定義longjmp和setjmp函數(shù)用到的jmp buf類型,說明這兩個(gè)函數(shù)。
n SHARE.H 定義文件共享函數(shù)的參數(shù)。
n SIGNAL.H 定義SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,說明rajse和signal兩個(gè)函數(shù)。
n STDARG.H 定義讀函數(shù)參數(shù)表的宏。(如vprintf,vscarf函數(shù))。
n STDDEF.H 定義一些公共數(shù)據(jù)類型和宏。
n STDIO.H 定義Kernighan和Ritchie在Unix System V 中定義的標(biāo)準(zhǔn)和擴(kuò)展的類型和宏。還定義標(biāo)準(zhǔn)I/O 預(yù)定義流:stdin,stdout和stderr,說明 I/O流子程序。
n STDLIB.H 說明一些常用的子程序:轉(zhuǎn)換子程序、搜索/ 排序子程序等。
n STRING.H 說明一些串操作和內(nèi)存操作函數(shù)。
n SYS\STAT.H 定義在打開和創(chuàng)建文件時(shí)用到的一些符號(hào)常量。
n SYS\TYPES.H 說明ftime函數(shù)和timeb結(jié)構(gòu)。
n SYS\TIME.H 定義時(shí)間的類型time[ZZ(Z] [ZZ)]t。
n TIME.H 定義時(shí)間轉(zhuǎn)換子程序asctime、localtime和gmtime的結(jié)構(gòu),ctime、 difftime、 gmtime、 localtime和stime用到的類型,并提供這些函數(shù)的原型。
n VALUE.H 定義一些重要常量,包括依賴于機(jī)器硬件的和為與Unix System V相兼容而說明的一些常量,包括浮點(diǎn)和雙精度值的范圍。
13.8 本章小結(jié)
1. C系統(tǒng)把文件當(dāng)作一個(gè)“流”,按字節(jié)進(jìn)行處理。
2. C文件按編碼方式分為二進(jìn)制文件和ASCII文件。
3. C語言中,用文件指針標(biāo)識(shí)文件,當(dāng)一個(gè)文件被打開時(shí),可取得該文件指針。
4. 文件在讀寫之前必須打開,讀寫結(jié)束必須關(guān)閉。
5. 文件可按只讀、只寫、讀寫、追加四種操作方式打開,同時(shí)還必須指定文件的類型是二進(jìn)制文件還是文本文件。
6. 文件可按字節(jié),字符串,數(shù)據(jù)塊為單位讀寫,文件也可按指定的格式進(jìn)行讀寫。
7. 文件內(nèi)部的位置指針可指示當(dāng)前的讀寫位置,移動(dòng)該指針可以對(duì)文件實(shí)現(xiàn)隨機(jī)讀寫。
#includestdio.h
#includestring.h
#includemath.h
main()
{
char c;
int i,j,k,s;
int m;
double a;
scanf("%c\n",c);
scanf("%d\n",m);
//若c是字母('A'-'Z','a'-'z')返回非0值,否則返回0
i=isalpha(c);
printf("i=%d",i);
//若c是數(shù)字('0'-'9')返回非0值,否則返回0
j=isdigit(c);
printf("j=%d",j);
//若c是大寫字母('A'-'Z')返回非0值,否則返回0
k=isupper(c);
printf("k=%d",k);
//返回x的開方
a= sqrt(m)
printf("a=%d",a);
//若c是空格(' '),水平制表符('\t'),回車符('\r'),
//走紙換行('\f'),垂直制表符('\v'),換行符('\n')
//返回非0值,否則返回0
s= isspace( c)
printf("s=%d",s);
}
另外,還有
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數(shù)字('0'-'9')
返回非0值,否則返回0
int isascii(int ch) 若ch是字符(ASCII碼中的0-127)返回非0值,否則返回0
int iscntrl(int ch) 若ch是作廢字符(0x7F)或普通控制字符(0x00-0x1F)
返回非0值,否則返回0
int isdigit(int ch) 若ch是數(shù)字('0'-'9')返回非0值,否則返回0
int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否則返回0
int islower(int ch) 若ch是小寫字母('a'-'z')返回非0值,否則返回0
int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否則返回0
int ispunct(int ch) 若ch是標(biāo)點(diǎn)字符(0x00-0x1F)返回非0值,否則返回0
int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回車符('\r'),
走紙換行('\f'),垂直制表符('\v'),換行符('\n')
返回非0值,否則返回0
int isupper(int ch) 若ch是大寫字母('A'-'Z')返回非0值,否則返回0
int isxdigit(int ch) 若ch是16進(jìn)制數(shù)('0'-'9','A'-'F','a'-'f')返回非0值,
否則返回0
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應(yīng)的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應(yīng)的大寫字母('A'-'Z')
========數(shù)學(xué)函數(shù)(原型聲明所在頭文件為math.h、stdlib.h、string.h、float.h)===========
int abs(int i) 返回整型參數(shù)i的絕對(duì)值
double cabs(struct complex znum) 返回復(fù)數(shù)znum的絕對(duì)值
double fabs(double x) 返回雙精度參數(shù)x的絕對(duì)值
long labs(long n) 返回長整型參數(shù)n的絕對(duì)值
double exp(double x) 返回指數(shù)函數(shù)ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中
double ldexp(double value,int exp); 返回value*2exp的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
double pow10(int p) 返回10p的值
double sqrt(double x) 返回x的開方
double acos(double x) 返回x的反余弦cos-1(x)值,x為弧度
double asin(double x) 返回x的反正弦sin-1(x)值,x為弧度
double atan(double x) 返回x的反正切tan-1(x)值,x為弧度
double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x為弧度
double cos(double x) 返回x的余弦cos(x)值,x為弧度
double sin(double x) 返回x的正弦sin(x)值,x為弧度
double tan(double x) 返回x的正切tan(x)值,x為弧度
double cosh(double x) 返回x的雙曲余弦cosh(x)值,x為弧度
double sinh(double x) 返回x的雙曲正弦sinh(x)值,x為弧度
double tanh(double x) 返回x的雙曲正切tanh(x)值,x為弧度
double hypot(double x,double y) 返回直角三角形斜邊的長度(z),
x和y為直角邊的長度,z2=x2+y2
double ceil(double x) 返回不小于x的最小整數(shù)
double floor(double x) 返回不大于x的最大整數(shù)
void srand(unsigned seed) 初始化隨機(jī)數(shù)發(fā)生器
int rand() 產(chǎn)生一個(gè)隨機(jī)數(shù)并返回這個(gè)數(shù)
double poly(double x,int n,double c[])從參數(shù)產(chǎn)生一個(gè)多項(xiàng)式
double modf(double value,double *iptr)將雙精度數(shù)value分解成尾數(shù)和階
double fmod(double x,double y) 返回x/y的余數(shù)
double frexp(double value,int *eptr) 將雙精度數(shù)value分成尾數(shù)和階
double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成浮點(diǎn)數(shù)并返回這個(gè)浮點(diǎn)數(shù)
double atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整數(shù)并返回這個(gè)整數(shù)
double atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整數(shù)并返回這個(gè)整數(shù)
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *gcvt(double value,int ndigit,char *buf)
將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號(hào)整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *ltoa(long value,char *string,int radix)
將長整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *itoa(int value,char *string,int radix)
將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時(shí)所用基數(shù)
double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個(gè)數(shù),錯(cuò)誤返回0
long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整型數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
double strtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),
long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長整型數(shù),
并返回這個(gè)數(shù),
int matherr(struct exception *e)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒有必要使用)
unsigned int _clear87() 清除浮點(diǎn)狀態(tài)字并返回原來的浮點(diǎn)狀態(tài)
void _fpreset() 重新初使化浮點(diǎn)數(shù)學(xué)程序包
unsigned int _status87() 返回浮點(diǎn)狀態(tài)字
============目錄函數(shù)(原型聲明所在頭文件為dir.h、dos.h)================
int chdir(char *path) 使指定的目錄path(如:"C:\\WPS")變成當(dāng)前的工作目錄,成
功返回0
int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功
返回0
pathname為指定的目錄名和文件名,如"C:\\WPS\\TXT"
ffblk為指定的保存文件信息的一個(gè)結(jié)構(gòu),定義如下:
┏━━━━━━━━━━━━━━━━━━┓
┃struct ffblk ┃
┃{ ┃
┃ char ff_reserved[21]; /*DOS保留字*/┃
┃ char ff_attrib; /*文件屬性*/ ┃
┃ int ff_ftime; /*文件時(shí)間*/ ┃
┃ int ff_fdate; /*文件日期*/ ┃
┃ long ff_fsize; /*文件長度*/ ┃
┃ char ff_name[13]; /*文件名*/ ┃
┃} ┃
┗━━━━━━━━━━━━━━━━━━┛
attrib為文件屬性,由以下字符代表
┏━━━━━━━━━┳━━━━━━━━┓
┃FA_RDONLY 只讀文件┃FA_LABEL 卷標(biāo)號(hào)┃
┃FA_HIDDEN 隱藏文件┃FA_DIREC 目錄 ┃
┃FA_SYSTEM 系統(tǒng)文件┃FA_ARCH 檔案 ┃
┗━━━━━━━━━┻━━━━━━━━┛
例:
struct ffblk ff;
findfirst("*.wps",ff,FA_RDONLY);
int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0
void fumerge(char *path,char *drive,char *dir,char *name,char *ext)
此函數(shù)通過盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴(kuò)展名ext(.EXE、.COM等)組成一個(gè)文件名
存與path中.
int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)
此函數(shù)將文件名path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴(kuò)展名ext(.EXE、.COM等),并分別存入相應(yīng)的變量中.
int getcurdir(int drive,char *direc) 此函數(shù)返回指定驅(qū)動(dòng)器的當(dāng)前工作目錄名稱
drive 指定的驅(qū)動(dòng)器(0=當(dāng)前,1=A,2=B,3=C等)
direc 保存指定驅(qū)動(dòng)器當(dāng)前工作路徑的變量 成功返回0
char *getcwd(char *buf,iint n) 此函數(shù)取當(dāng)前工作目錄并存入buf中,直到n個(gè)字
節(jié)長為為止.錯(cuò)誤返回NULL
int getdisk() 取當(dāng)前正在使用的驅(qū)動(dòng)器,返回一個(gè)整數(shù)(0=A,1=B,2=C等)
int setdisk(int drive) 設(shè)置要使用的驅(qū)動(dòng)器drive(0=A,1=B,2=C等),
返回可使用驅(qū)動(dòng)器總數(shù)
int mkdir(char *pathname) 建立一個(gè)新的目錄pathname,成功返回0
int rmdir(char *pathname) 刪除一個(gè)目錄pathname,成功返回0
char *mktemp(char *template) 構(gòu)造一個(gè)當(dāng)前目錄上沒有的文件名并存于template中
char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路徑,
,此函數(shù)使用DOS的PATH變量,未找到文件返回NULL
===========進(jìn)程函數(shù)(原型聲明所在頭文件為stdlib.h、process.h)===========
void abort() 此函數(shù)通過調(diào)用具有出口代碼3的_exit寫一個(gè)終止信息于stderr,
并異常終止程序。無返回值
int exec…裝入和運(yùn)行其它程序
int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函數(shù)族裝入并運(yùn)行程序pathname,并將參數(shù)
arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯(cuò)返回-1
在exec函數(shù)族中,后綴l、v、p、e添加到exec后,
所指定的函數(shù)將具有某種操作能力
有后綴 p時(shí),函數(shù)可以利用DOS的PATH變量查找子程序文件。
l時(shí),函數(shù)中被傳遞的參數(shù)個(gè)數(shù)固定。
v時(shí),函數(shù)中被傳遞的參數(shù)個(gè)數(shù)不固定。
e時(shí),函數(shù)傳遞指定參數(shù)envp,允許改變子進(jìn)程的環(huán)境,
無后綴e時(shí),子進(jìn)程使用當(dāng)前程序的環(huán)境。
void _exit(int status)終止當(dāng)前程序,但不清理現(xiàn)場(chǎng)
void exit(int status) 終止當(dāng)前程序,關(guān)閉所有文件,寫緩沖區(qū)的輸出(等待輸出),
并調(diào)用任何寄存器的"出口函數(shù)",無返回值
int spawn…運(yùn)行子程序
int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnv( int mode,char *pathname,char *argv[])
int spawnve( int mode,char *pathname,char *argv[],char *envp[])
int spawnvp( int mode,char *pathname,char *argv[])
int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函數(shù)族在mode模式下運(yùn)行子程序pathname,并將參數(shù)
arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯(cuò)返回-1
mode為運(yùn)行模式
mode為 P_WAIT 表示在子程序運(yùn)行完后返回本程序
P_NOWAIT 表示在子程序運(yùn)行時(shí)同時(shí)運(yùn)行本程序(不可用)
P_OVERLAY表示在本程序退出后運(yùn)行子程序
在spawn函數(shù)族中,后綴l、v、p、e添加到spawn后,
所指定的函數(shù)將具有某種操作能力
有后綴 p時(shí), 函數(shù)利用DOS的PATH查找子程序文件
l時(shí), 函數(shù)傳遞的參數(shù)個(gè)數(shù)固定.
v時(shí), 函數(shù)傳遞的參數(shù)個(gè)數(shù)不固定.
e時(shí), 指定參數(shù)envp可以傳遞給子程序,允許改變子程序運(yùn)行環(huán)境.
當(dāng)無后綴e時(shí),子程序使用本程序的環(huán)境.
int system(char *command) 將MSDOS命令command傳遞給DOS執(zhí)行
======轉(zhuǎn)換子程序(函數(shù)原型所在頭文件為math.h、stdlib.h、ctype.h、float.h)========
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *gcvt(double value,int ndigit,char *buf)
將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號(hào)整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *ltoa(long value,char *string,int radix)
將長整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *itoa(int value,char *string,int radix)
將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時(shí)所用基數(shù)
double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個(gè)數(shù),錯(cuò)誤返回0
long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整型數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
double strtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),
long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長整型數(shù),
并返回這個(gè)數(shù),
int toascii(int c) 返回c相應(yīng)的ASCII
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應(yīng)的小寫字母('a'-'z')
int _tolower(int ch) 返回ch相應(yīng)的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應(yīng)的大寫字母('A'-'Z')
int _toupper(int ch) 返回ch相應(yīng)的大寫字母('A'-'Z')
其實(shí)在C語言編程中,我們所用的在部分函數(shù)就是C語言庫本身帶的函數(shù),在使用某一個(gè)庫文件之前,我們先要包含庫文件所對(duì)應(yīng)的頭文件,再在我們需要的地方調(diào)用庫函數(shù)就行了.最常用的printf();這就是一個(gè)庫函數(shù),這個(gè)庫函數(shù)在頭文件stdio.h中聲明.所以使用前要先#include stdio.h
舉個(gè)例子:
#include stdio.h //一定要先包含庫函數(shù)聲明的文件
int main()
{
printf("for example!\n"); //在此處調(diào)用庫函數(shù)
}
如果想要了解更多的庫函數(shù),可以參考C語言的教材,一般的附錄中會(huì)列出.也可以查看C庫函數(shù).
本文題目:用c語言調(diào)用五個(gè)庫函數(shù) 用c語言調(diào)用五個(gè)庫函數(shù)數(shù)據(jù)
網(wǎng)站網(wǎng)址:http://www.chinadenli.net/article10/doogpgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、App設(shè)計(jì)、網(wǎng)站排名、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)