本文目錄一覽:
- 1、請問C語言對文件的讀取有哪些函數,都有什麼功能?像fseek();fscanf();fread……什麼的
- 2、C語言實現文件管理的庫函數
- 3、c語言庫函數 下載
- 4、求c語言所有函數庫的下載地址
- 5、c語言寫入文件的函數
- 6、c語言文件操作相關函數的用法
請問C語言對文件的讀取有哪些函數,都有什麼功能?像fseek();fscanf();fread……什麼的
C語言文件操作函數
13.1C語言文件
1,兩種文件存取方式(輸入,輸出方式)
順序存取
直接存取
2,數據的兩種存放形式
文本文件
二進位文件
13.2文件指針
定義文件類型指針變數的一般形式:
FILE *指針變數名;
例如:
FILE *fp1,*fp2;
13.3打開文件
在使用文件之前,需打開文件.在C里使用fopen函數打開文件.格式為:
fopen(文件名,文件使用方式);
此函數返回一個指向FILE類型的指針.如:
FILE *fp;
fp=fopen(“file_1″,”r”);
如果調用成功,fp就指向file_1,否則返回為NULL,所以為了保證文件的正確使用,要進行測試.採用如下語句:
If((fp=fopen(“file_1″,”r”))==NULL)
{
printf(“Cannot open this file\n”);
exit(0);
}
最常用的文件使用方式及其含義如下:
1,”r”.為讀而打開文本文件.(不存在則出錯)
2,”rb”.為讀而打開二進位文件.
3,”w”.為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋)
4,”wb”.為寫而打開二進位文件.
5,”a”.為在文件後面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件後追加)
6,”ab”.為在文件後面添加數據而打開一個二進位文件.
最常用的文件使用方式及其含義如下:
7,”r+”.為讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所佔的空間,其後不變)
8,”rb+”.為讀和寫而打開二進位文件.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
9,”w+”.首先建立一個新文件,進行寫操作,隨後可以從頭開始讀.(若文件存在,原內容將全部消失)
10,”wb+”.功能與”w+”同.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
最常用的文件使用方式及其含義如下:
11,”a+”.功能與”a”相同;只是在文件尾部添加新的數據後,可以從頭開始讀.
12,”ab+”.功能與”a+”相同;只是在文件尾部添加新數據之後,可以由位置函數設置開始讀的起始位置.
13.4關閉文件
當文件的讀寫操作完成之後,使用fclose函數關閉文件.格式如下:
fclose(文件指針)
如:fclose(fp);
13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
1,調用putc(或fputc)函數輸出一個字元
調用形式為:
putc(ch,fp);
功能是:將字元ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數返回所輸出的字元;否則,返回一個EOF值.EOF是在stdio.h庫函數文件中定義的符號常量,其值等於-1.
13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字元@作為鍵盤輸入結束標誌.
#include
Void main()
{
FILE *fpout;
char ch;
if(fpout=fpopen(“file_1″,”w”)==NULL)
{
printf(“Cannot open this file!\n”);
exit(0);
}
ch=getchar();
while(ch!=’@’)
{ fputc(ch,fpout); ch=getchar(); }
fclose(fpout);
}
2.調用getc(或fgetc)函數輸入一個字元
調用形式為:
ch=getc(pf);
功能是:從pf指定的文件中讀如一個字元,並把它作為函數值返回.
例如:把一個已存在磁碟上的file_1.dat文本文件中的內容,原樣輸出到終端屏幕上.
#include
void main(){
FILE *fpin;
char ch;
if((fpin=fopen(“file_1.dat”,”r”))==NULL)
{ printf(“Cann’t open this file!\n”);exit(0);}
ch=fgetc(fpin);
while (ch!=EOF)
{ putchar(ch); ch=fgetc(fpin);}
fclose(fpin);
}
13.6判斷文件結束函數feof
EOF可以作為文本文件的結束 標誌,但不能作為二進位文件的結束符.feof函數既可以判斷二進位文件,又可以判斷文本文件.
例:編寫程序,用於把一個文本文件(源)複製到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:
可執行程序名 源文件名 目的文件名
#include
void filecopy(FILE* ,FILE *);
void main(int argc,char *argv[]){
FILE *fpin,*fpout;
if(argc==3)
{ fpin=fopen(argv[1],”r”);
fpout=fopen(argv[2],”w”);
filecopy(fpin,fpout);
fclose(fpin);fclose(fpout);
}
else if(argc3)
printf(“The file names too many!!\n”;
else
printf(“There are no file names for input or output!!\n );
}
void filecopy(FILE *fpin,FILE *fpout)
{
char ch;
ch=getc(fpin);
while(!feof(fpin))
{putc(ch,fpout); ch=getc(fpin);}
}
13.7fscanf函數和fprintf函數
1,fscanf函數
fscanf只能從文本文件中按格式輸入,和scanf函數相似,只不過輸入的對象是磁碟上文本文件中的數據.調用形式為:
fscanf(文件指針,格式控制字元串,輸入項表)
例如:fscanf(fp,”%d%d”,a,b);
fscanf(stdin,”%d%d”,a,b);
等價於scanf(“%d%d”,a,b);
3.fprintf函數
fprintf函數按格式將內存中的數據轉換成對應的字元,並以ASCII代碼形式輸出到文本文件中.Fprintf函數和printf函數相似,只是將輸出的內容按格式存放到磁碟的文本文件中.調用形式如下:
fprintf(文件指針,格式控制字元串,輸出項表)
如:fprintf(fp,”%d %d”,x,y);
以下語句 fprintf(stdout,”%d %d”,x,y)
13.8fgets函數和fputs函數
1,fgets函數
fgets函數用來從文件中讀入字元串.調用形式如下:
fgets(str,n,fp);
函數功能是:從fp所指文件中讀入n-1個字元放入str為起始地址的空間內;如果在未讀滿n-1個字元時,則遇到換行符或一個EOF結束本次讀操作,並已str作為函數值返回.
13.8fgets函數和fputs函數
2,fputs函數
fput函數把字元串輸出到文件中.函數調用形式如下:
fputs(str,fp);
注意:為了便於讀入,在輸出字元串時,應當人為的加諸如”\n”這樣的字元串.
#include stdio.h
#include iostream
int main(int argc, char *argv[])
{
char arr[10] ;
char *ap = “hello!” ;
FILE *fp ;
if ((fp = fopen(“hello.txt”, “wt+”)) == NULL)
{
printf(“error!”) ;
exit(1) ;
}
fputs(ap, fp) ;
rewind(fp) ; //
fgets(arr, 10, fp) ;
printf(“%s\n”, arr) ;
fclose(fp) ;
return 0 ;
}
13.9fread函數和fwrite函數
例如有如下結構體:
struct st{
char num[8];
float mk[5];
}pers[30];
以下循環將把這30個元素中的數據輸出到fp所指文件中.
for(i=0;i30;i++)
fwrite(pers[i],sizeof(struct st),1,fp);
13.9fread函數和fwrite函數
以下語句從fp所指的文件中再次將每個學生數據逐個讀入到pers數組中.
i=0;
fread(pers[i],sizeof(struct st),1,fp);
while(!feof(fp))
{ i++;
fread(pers[i],sizeof(struct st),1,fp);
}
13.10文件定位函數
1,fseek函數
fseek函數用來移動文件位置指針到指定的位置上,接著的讀或寫操作將從此位置開始.函數的調用形式如下:
fseek(pf,offset,origin)
pf:文件指針
offset:以位元組為單位的位移量,為長整形.
origin:是起始點,用來指定位移量是以哪個位置為基準的.
1,fseek函數
位移量的表示方法
標識符 數字 代表的起始點
SEEK_SET 0 文件開始
SEEK_END 2 文件末尾
SEEK_CUR 1 文件當前位置
假設pf已指向一個二進位文件,則;
fseek(pf,30L,SEEK_SET)
fseek(pf,-10L*sizeof(int),SEEK_END)
對於文本文件,位移量必須是0;如:
fseek(pf,0L,SEEK_SET)
fseek(pf,0L,SEEK_END)
2. ftell函數
ftell函數用以獲得文件當前位置指針的位置,函數給出當前位置指針相對於文件開頭的位元組數.如;
long t;
t=ftell(pf);
當函數調用出錯時,函數返回-1L.
我們可以通過以下方式來測試一個文件的長度:
fseek(fp,0L,SEEK_END);
t=ftell(fp);
3.rewind函數
調用形式為:
rewind(pf);
函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.
13.10文件應用
在磁碟上的test.txt文件中放有10個不小於2的正整數,用函數調用方式編寫程序.要求實現:
1,在被調函數prime中,判斷和統計10個整數中的素數以及個數.
2,在主函數中將全部素數追加到磁碟文件test.txt的尾部,同時輸出到屏幕上.
#include
#include
Int prime(int a[],int n)
{
int I,j,k=0,flag=0;
for(i=0;i { for(j=2;j if(a[i]%j==0)
{ flag=0; break;}
else flag=1;
if(flag)
{a[k]=a[i];k++;}
}
return k;
}
void main(){
int n,I,a[10];
FILE *fp;
fp=fopen(“test1-2.txt”,”r+”);
for(n=0;n10;n++)
fscanf(fp,”%d”,a[n]);
n=prime(a,n);
fseek(fp,o,2);
for(i=0;i {printf(“%3d”,a[i]);
fprintf(fp,”%3d”,a[i]);
}
fclose(fp);
C語言實現文件管理的庫函數
2.不同集成開發環境下c語言的頭文件和庫函數是否相同?即:我能否將其他2.答案依然是no不同的開發環境會提供不同的庫文件,這些庫文件的實現未必
c語言庫函數 下載
我有點呵呵
函數名: abort
功 能: 異常終止一個進程
用 法: void abort(void);
程序例:
#include stdio.h
#include stdlib.h
int main(void)
{
printf(“Calling abort()\n”);
abort();
return 0; /* This is never reached */
}
函數名: abs
功 能: 求整數的絕對值
用 法: int abs(int i);
程序例:
#include stdio.h
#include math.h
int main(void)
{
int number = -1234;
printf(“number: %d absolute value: %d\n”, number, abs(number));
return 0;
}
函數名: absread, abswirte
功 能: 絕對磁碟扇區讀、寫數據
用 法: int absread(int drive, int nsects, int sectno, void *buffer);
int abswrite(int drive, int nsects, in tsectno, void *buffer);
程序例:
/* absread example */
#include stdio.h
#include conio.h
#include process.h
#include dos.h
int main(void)
{
int i, strt, ch_out, sector;
char buf[512];
printf(“Insert a diskette into drive A and press any key\n”);
getch();
sector = 0;
if (absread(0, 1, sector, buf) != 0)
{
perror(“Disk problem”);
exit(1);
}
printf(“Read OK\n”);
strt = 3;
for (i=0; i80; i++)
{
ch_out = buf[strt+i];
putchar(ch_out);
}
printf(“\n”);
return(0);
}
函數名: access
功 能: 確定文件的訪問許可權
用 法: int access(const char *filename, int amode);
程序例:
#include stdio.h
#include io.h
int file_exists(char *filename);
int main(void)
{
printf(“Does NOTEXIST.FIL exist: %s\n”,
file_exists(“NOTEXISTS.FIL”) ? “YES” : “NO”);
return 0;
}
int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}
函數名: acos
功 能: 反餘弦函數
用 法: double acos(double x);
程序例:
#include stdio.h
#include math.h
int main(void)
{
double result;
double x = 0.5;
result = acos(x);
printf(“The arc cosine of %lf is %lf\n”, x, result);
return 0;
}
函數名: allocmem
功 能: 分配DOS存儲段
用 法: int allocmem(unsigned size, unsigned *seg);
程序例:
#include dos.h
#include alloc.h
#include stdio.h
int main(void)
{
unsigned int size, segp;
int stat;
size = 64; /* (64 x 16) = 1024 bytes */
stat = allocmem(size, segp);
if (stat == -1)
printf(“Allocated memory at segment: %x\n”, segp);
else
printf(“Failed: maximum number of paragraphs available is %u\n”,
stat);
return 0;
}
函數名: arc
功 能: 畫一弧線
用 法: void far arc(int x, int y, int stangle, int endangle, int radius);
程序例:
#include graphics.h
#include stdlib.h
#include stdio.h
#include conio.h
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int midx, midy;
int stangle = 45, endangle = 135;
int radius = 100;
/* initialize graphics and local variables */
initgraph(gdriver, gmode, “”);
/* read result of initialization */
errorcode = graphresult(); /* an error occurred */
if (errorcode != grOk)
{
printf(“Graphics error: %s\n”, grapherrormsg(errorcode));
printf(“Press any key to halt:”);
getch();
exit(1); /* terminate with an error code */
}
midx = getmaxx() / 2;
midy = getmaxy() / 2;
setcolor(getmaxcolor());
/* draw arc */
arc(midx, midy, stangle, endangle, radius);
/* clean up */
getch();
closegraph();
return 0;
}
函數名: asctime
功 能: 轉換日期和時間為ASCII碼
用 法: char *asctime(const struct tm *tblock);
程序例:
#include stdio.h
#include string.h
#include time.h
int main(void)
{
struct tm t;
char str[80];
/* sample loading of tm structure */
t.tm_sec = 1; /* Seconds */
t.tm_min = 30; /* Minutes */
t.tm_hour = 9; /* Hour */
t.tm_mday = 22; /* Day of the Month */
t.tm_mon = 11; /* Month */
t.tm_year = 56; /* Year – does not include century */
t.tm_wday = 4; /* Day of the week */
t.tm_yday = 0; /* Does not show in asctime */
t.tm_isdst = 0; /* Is Daylight SavTime; does not show in asctime */
/* converts structure to null terminated
string */
strcpy(str, asctime(t));
printf(“%s\n”, str);
return 0;
}
函數名: asin
功 能: 反正弦函數
用 法: double asin(double x);
程序例:
#include stdio.h
#include math.h
int main(void)
{
double result;
double x = 0.5;
result = asin(x);
printf(“The arc sin of %lf is %lf\n”, x, result);
return(0);
}
函數名: assert
功 能: 測試一個條件並可能使程序終止
用 法: void assert(int test);
程序例:
#include assert.h
#include stdio.h
#include stdlib.h
struct ITEM {
int key;
int value;
};
/* add item to list, make sure list is not null */
void additem(struct ITEM *itemptr) {
assert(itemptr != NULL);
/* add item to list */
}
int main(void)
{
additem(NULL);
return 0;
}
函數名: atan
功 能: 反正切函數
用 法: double atan(double x);
程序例:
#include stdio.h
#include math.h
int main(void)
{
double result;
double x = 0.5;
result = atan(x);
printf(“The arc tangent of %lf is %lf\n”, x, result);
return(0);
}
函數名: atan2
功 能: 計算Y/X的反正切值
用 法: double atan2(double y, double x);
程序例:
#include stdio.h
#include math.h
int main(void)
{
double result;
double x = 90.0, y = 45.0;
result = atan2(y, x);
printf(“The arc tangent ratio of %lf is %lf\n”, (y / x), result);
return 0;
}
函數名: atexit
功 能: 註冊終止函數
用 法: int atexit(atexit_t func);
程序例:
#include stdio.h
#include stdlib.h
void exit_fn1(void)
{
printf(“Exit function #1 called\n”);
}
void exit_fn2(void)
{
printf(“Exit function #2 called\n”);
}
int main(void)
{
/* post exit function #1 */
atexit(exit_fn1);
/* post exit function #2 */
atexit(exit_fn2);
return 0;
}
函數名: atof
功 能: 把字元串轉換成浮點數
用 法: double atof(const char *nptr);
程序例:
#include stdlib.h
#include stdio.h
int main(void)
{
float f;
char *str = “12345.67”;
f = atof(str);
printf(“string = %s float = %f\n”, str, f);
return 0;
}
函數名: atoi
功 能: 把字元串轉換成長整型數
用 法: int atoi(const char *nptr);
程序例:
#include stdlib.h
#include stdio.h
int main(void)
{
int n;
char *str = “12345.67”;
n = atoi(str);
printf(“string = %s integer = %d\n”, str, n);
return 0;
}
函數名: atol
功 能: 把字元串轉換成長整型數
用 法: long atol(const char *nptr);
程序例:
#include stdlib.h
#include stdio.h
int main(void)
{
long l;
char *str = “98765432”;
l = atol(lstr);
printf(“string = %s integer = %ld\n”, str, l);
return(0);
}
目錄
Null’s
求c語言所有函數庫的下載地址
我有,pdf的
以前網上沒找到,從朋友那拷來的,有意的話留下郵箱
c語言寫入文件的函數
for (i=*p;i*p+1;i++)這一句就錯大了。p還沒有賦值,哪來的*p?所以再沒有往下看。
c語言文件操作相關函數的用法
clearerr(清除文件流的錯誤旗標)
相關函數 feof
表頭文件 #includestdio.h
定義函數 void clearerr(FILE * stream);
函數說明 clearerr()清除參數stream指定的文件流所使用的錯誤旗標。
返回值
fclose(關閉文件)
相關函數 close,fflush,fopen,setbuf
表頭文件 #includestdio.h
定義函數 int fclose(FILE * stream);
函數說明 fclose()用來關閉先前fopen()打開的文件。此動作會讓緩衝區內的數據寫入文件中,並釋放系統所提供的文件資源。
返回值 若關文件動作成功則返回0,有錯誤發生時則返回EOF並把錯誤代碼存到errno。
錯誤代碼 EBADF表示參數stream非已打開的文件。
範例 請參考fopen()。
fdopen(將文件描述詞轉為文件指針)
相關函數 fopen,open,fclose
表頭文件 #includestdio.h
定義函數 FILE * fdopen(int fildes,const char * mode);
函數說明 fdopen()會將參數fildes 的文件描述詞,轉換為對應的文件指針後返回。參數mode 字元串則代表著文件指針的流形態,此形態必須和原先文件描述詞讀寫模式相同。關於mode 字元串格式請參考fopen()。
返回值 轉換成功時返回指向該流的文件指針。失敗則返回NULL,並把錯誤代碼存在errno中。
範例
#includestdio.h
main()
{
FILE * fp =fdopen(0,」w+」);
fprintf(fp,」%s\n」,」hello!」);
fclose(fp);
}
執行 hello!
feof(檢查文件流是否讀到了文件尾)
相關函數 fopen,fgetc,fgets,fread
表頭文件 #includestdio.h
定義函數 int feof(FILE * stream);
函數說明 feof()用來偵測是否讀取到了文件尾,尾數stream為fopen()所返回之文件指針。如果已到文件尾則返回非零值,其他情況返回0。
返回值 返回非零值代表已到達文件尾。
fflush(更新緩衝區)
相關函數 write,fopen,fclose,setbuf
表頭文件 #includestdio.h
定義函數 int fflush(FILE* stream);
函數說明 fflush()會強迫將緩衝區內的數據寫回參數stream指定的文件中。如果參數stream為NULL,fflush()會將所有打開的文件數據更新。
返回值 成功返回0,失敗返回EOF,錯誤代碼存於errno中。
錯誤代碼 EBADF 參數stream 指定的文件未被打開,或打開狀態為只讀。其它錯誤代碼參考write()。
fgetc(由文件中讀取一個字元)
相關函數 open,fread,fscanf,getc
表頭文件 includestdio.h
定義函數 nt fgetc(FILE * stream);
函數說明 fgetc()從參數stream所指的文件中讀取一個字元。若讀到文件尾而無數據時便返回EOF。
返回值 getc()會返回讀取到的字元,若返回EOF則表示到了文件尾。
範例
#includestdio.h
main()
{
FILE *fp;
int c;
fp=fopen(「exist」,」r」);
while((c=fgetc(fp))!=EOF)
printf(「%c」,c);
fclose(fp);
}
fgets(由文件中讀取一字元串)
相關函數 open,fread,fscanf,getc
表頭文件 includestdio.h
定義函數 har * fgets(char * s,int size,FILE * stream);
函數說明 fgets()用來從參數stream所指的文件內讀入字元並存到參數s所指的內存空間,直到出現換行字元、讀到文件尾或是已讀了size-1個字元為止,最後會加上NULL作為字元串結束。
返回值 gets()若成功則返回s指針,返回NULL則表示有錯誤發生。
範例
#includestdio.h
main()
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
}
執行 this is a test /*輸入*/
this is a test /*輸出*/
fileno(返迴文件流所使用的文件描述詞)
相關函數 open,fopen
表頭文件 #includestdio.h
定義函數 int fileno(FILE * stream);
函數說明 fileno()用來取得參數stream指定的文件流所使用的文件描述詞。
返回值 返迴文件描述詞。
範例
#includestdio.h
main()
{
FILE * fp;
int fd;
fp=fopen(「/etc/passwd」,」r」);
fd=fileno(fp);
printf(「fd=%d\n」,fd);
fclose(fp);
}
執行 fd=3
fopen(打開文件)
相關函數 open,fclose
表頭文件 #includestdio.h
定義函數 FILE * fopen(const char * path,const char * mode);
函數說明 參數path字元串包含欲打開的文件路徑及文件名,參數mode字元串則代表著流形態。
mode有下列幾種形態字元串:
r 打開只讀文件,該文件必須存在。
r+ 打開可讀寫的文件,該文件必須存在。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函數庫打開的文件為二進位文件,而非純文字文件。不過在POSIX系統,包含Linux都會忽略該字元。由fopen()所建立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)許可權,此文件許可權也會參考umask值。
返回值 文件順利打開後,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
附加說明 一般而言,開文件後會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。
範例
#includestdio.h
main()
{
FILE * fp;
fp=fopen(「noexist」,」a+」);
if(fp= =NULL) return;
fclose(fp);
}
fputc(將一指定字元寫入文件流中)
相關函數 fopen,fwrite,fscanf,putc
表頭文件 #includestdio.h
定義函數 int fputc(int c,FILE * stream);
函數說明 fputc 會將參數c 轉為unsigned char 後寫入參數stream 指定的文件中。
返回值 fputc()會返回寫入成功的字元,即參數c。若返回EOF則代表寫入失敗。
範例
#includestdio.h
main()
{
FILE * fp;
char a[26]=」abcdefghijklmnopqrstuvwxyz」;
int i;
fp= fopen(「noexist」,」w」);
for(i=0;i26;i++)
fputc(a,fp);
fclose(fp);
}
fputs(將一指定的字元串寫入文件內)
相關函數 fopen,fwrite,fscanf,fputc,putc
表頭文件 #includestdio.h
定義函數 int fputs(const char * s,FILE * stream);
函數說明 fputs()用來將參數s所指的字元串寫入到參數stream所指的文件內。
返回值 若成功則返回寫出的字元個數,返回EOF則表示有錯誤發生。
範例 請參考fgets()。
fread(從文件流讀取數據)
相關函數 fopen,fwrite,fseek,fscanf
表頭文件 #includestdio.h
定義函數 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
函數說明 fread()用來從文件流中讀取數據。參數stream為已打開的文件指針,參數ptr 指向欲存放讀取進來的數據空間,讀取的字元數以參數size*nmemb來決定。Fread()會返回實際讀取到的nmemb數目,如果此值比參數nmemb 來得小,則代表可能讀到了文件尾或有錯誤發生,這時必須用feof()或ferror()來決定發生什麼情況。
返回值 返回實際讀取到的nmemb數目。
附加說明
範例
#includestdio.h
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
int main(){
FILE * stream;
int i;
stream = fopen(「/tmp/fwrite」,」r」);
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;inmemb;i++)
printf(「name[%d]=%-20s:size[%d]=%d\n」,i,s.name,i,s.size);
}
執行
name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=Windows2000 size[2]=11
freopen(打開文件)
相關函數 fopen,fclose
表頭文件 #includestdio.h
定義函數 FILE * freopen(const char * path,const char * mode,FILE * stream);
函數說明 參數path字元串包含欲打開的文件路徑及文件名,參數mode請參考fopen()說明。參數stream為已打開的文件指針。Freopen()會將原stream所打開的文件流關閉,然後打開參數path的文件。
返回值 文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
範例
#includestdio.h
main()
{
FILE * fp;
fp=fopen(「/etc/passwd」,」r」);
fp=freopen(「/etc/group」,」r」,fp);
fclose(fp);
}
fseek(移動文件流的讀寫位置)
相關函數 rewind,ftell,fgetpos,fsetpos,lseek
表頭文件 #includestdio.h
定義函數 int fseek(FILE * stream,long offset,int whence);
函數說明 fseek()用來移動文件流的讀寫位置。參數stream為已打開的文件指針,參數offset為根據參數whence來移動讀寫位置的位移數。
參數 whence為下列其中一種:
SEEK_SET從距文件開頭offset位移量為新的讀寫位置。SEEK_CUR 以目前的讀寫位置往後增加offset個位移量。
SEEK_END將讀寫位置指向文件尾後再增加offset個位移量。
當whence值為SEEK_CUR 或SEEK_END時,參數offset允許負值的出現。
下列是較特別的使用方式:
1) 欲將讀寫位置移動到文件開頭時:fseek(FILE *stream,0,SEEK_SET);
2) 欲將讀寫位置移動到文件尾時:fseek(FILE *stream,0,0SEEK_END);
返回值 當調用成功時則返回0,若有錯誤則返回-1,errno會存放錯誤代碼。
附加說明 fseek()不像lseek()會返回讀寫位置,因此必須使用ftell()來取得目前讀寫的位置。
範例
#includestdio.h
main()
{
FILE * stream;
long offset;
fpos_t pos;
stream=fopen(「/etc/passwd」,」r」);
fseek(stream,5,SEEK_SET);
printf(「offset=%d\n」,ftell(stream));
rewind(stream);
fgetpos(stream,pos);
printf(「offset=%d\n」,pos);
pos=10;
fsetpos(stream,pos);
printf(「offset = %d\n」,ftell(stream));
fclose(stream);
}
執行 offset = 5
offset =0
offset=10
ftell(取得文件流的讀取位置)
相關函數 fseek,rewind,fgetpos,fsetpos
表頭文件 #includestdio.h
定義函數 long ftell(FILE * stream);
函數說明 ftell()用來取得文件流目前的讀寫位置。參數stream為已打開的文件指針。
返回值 當調用成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤代碼。
錯誤代碼 EBADF 參數stream無效或可移動讀寫位置的文件流。
範例 參考fseek()。
fwrite(將數據寫至文件流)
相關函數 fopen,fread,fseek,fscanf
表頭文件 #includestdio.h
定義函數 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
函數說明 fwrite()用來將數據寫入文件流中。參數stream為已打開的文件指針,參數ptr 指向欲寫入的數據地址,總共寫入的字元數以參數size*nmemb來決定。Fwrite()會返回實際寫入的nmemb數目。
返回值 返回實際寫入的nmemb數目。
範例
#includestdio.h
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
set_s(0,」Linux!」);
set_s(1,」FreeBSD!」);
set_s(2,」Windows2000.」);
stream=fopen(「/tmp/fwrite」,」w」);
fwrite(s,sizeof(struct test),nmemb,stream);
fclose(stream);
}
執行 參考fread()。
getc(由文件中讀取一個字元)
相關函數 read,fopen,fread,fgetc
表頭文件 #includestdio.h
定義函數 int getc(FILE * stream);
函數說明 getc()用來從參數stream所指的文件中讀取一個字元。若讀到文件尾而無數據時便返回EOF。雖然getc()與fgetc()作用相同,但getc()為宏定義,非真正的函數調用。
返回值 getc()會返回讀取到的字元,若返回EOF則表示到了文件尾。
範例 參考fgetc()。
getchar(由標準輸入設備內讀進一字元)
相關函數 fopen,fread,fscanf,getc
表頭文件 #includestdio.h
定義函數 int getchar(void);
函數說明 getchar()用來從標準輸入設備中讀取一個字元。然後將該字元從unsigned char轉換成int後返回。
返回值 getchar()會返回讀取到的字元,若返回EOF則表示有錯誤發生。
附加說明 getchar()非真正函數,而是getc(stdin)宏定義。
範例
#includestdio.h
main()
{
FILE * fp;
int c,i;
for(i=0li5;i++)
{
c=getchar();
putchar(c);
}
}
執行 1234 /*輸入*/
1234 /*輸出*/
gets(由標準輸入設備內讀進一字元串)
相關函數 fopen,fread,fscanf,fgets
表頭文件 #includestdio.h
定義函數 char * gets(char *s);
函數說明 gets()用來從標準設備讀入字元並存到參數s所指的內存空間,直到出現換行字元或讀到文件尾為止,最後加上NULL作為字元串結束。
返回值 gets()若成功則返回s指針,返回NULL則表示有錯誤發生。
附加說明 由於gets()無法知道字元串s的大小,必須遇到換行字元或文件尾才會結束輸入,因此容易造成緩衝溢出的安全性問題。建議使用fgets()取代。
範例 參考fgets()
mktemp(產生唯一的臨時文件名)
相關函數 tmpfile
表頭文件 #includestdlib.h
定義函數 char * mktemp(char * template);
函數說明 mktemp()用來產生唯一的臨時文件名。參數template所指的文件名稱字元串中最後六個字元必須是XXXXXX。產生後的文件名會借字元串指針返回。
返回值 文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。
附加說明 參數template所指的文件名稱字元串必須聲明為數組,如:
char template[ ]=」template-XXXXXX」;
不可用char * template=」template-XXXXXX」;
範例
#includestdlib.h
main()
{
char template[ ]=」template-XXXXXX」;
mktemp(template);
printf(「template=%s\n」,template);
}
putc(將一指定字元寫入文件中)
相關函數 fopen,fwrite,fscanf,fputc
表頭文件 #includestdio.h
定義函數 int putc(int c,FILE * stream);
函數說明 putc()會將參數c轉為unsigned char後寫入參數stream指定的文件中。雖然putc()與fputc()作用相同,但putc()為宏定義,非真正的函數調用。
返回值 putc()會返回寫入成功的字元,即參數c。若返回EOF則代表寫入失敗。
範例 參考fputc()。
putchar(將指定的字元寫到標準輸出設備)
相關函數 fopen,fwrite,fscanf,fputc
表頭文件 #includestdio.h
定義函數 int putchar (int c);
函數說明 putchar()用來將參數c字元寫到標準輸出設備。
返回值 putchar()會返回輸出成功的字元,即參數c。若返回EOF則代表輸出失敗。
附加說明 putchar()非真正函數,而是putc(c,stdout)宏定義。
範例 參考getchar()。
rewind(重設文件流的讀寫位置為文件開頭)
相關函數 fseek,ftell,fgetpos,fsetpos
表頭文件 #includestdio.h
定義函數 void rewind(FILE * stream);
函數說明 rewind()用來把文件流的讀寫位置移至文件開頭。參數stream為已打開的文件指針。此函數相當於調用fseek(stream,0,SEEK_SET)。
返回值
範例 參考fseek()
setbuf(設置文件流的緩衝區)
相關函數 setbuffer,setlinebuf,setvbuf
表頭文件 #includestdio.h
定義函數 void setbuf(FILE * stream,char * buf);
函數說明 在打開文件流後,讀取內容之前,調用setbuf()可以用來設置文件流的緩衝區。參數stream為指定的文件流,參數buf指向自定的緩衝區起始地址。如果參數buf為NULL指針,則為無緩衝IO。Setbuf()相當於調用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ)
返回值
setbuffer(設置文件流的緩衝區)
相關函數 setlinebuf,setbuf,setvbuf
表頭文件 #includestdio.h
定義函數 void setbuffer(FILE * stream,char * buf,size_t size);
函數說明 在打開文件流後,讀取內容之前,調用setbuffer()可用來設置文件流的緩衝區。參數stream為指定的文件流,參數buf指向自定的緩衝區起始地址,參數size為緩衝區大小。
返回值
setlinebuf(設置文件流為線性緩衝區)
相關函數 setbuffer,setbuf,setvbuf
表頭文件 #includestdio.h
定義函數 void setlinebuf(FILE * stream);
函數說明 setlinebuf()用來設置文件流以換行為依據的無緩衝IO。相當於調用:setvbuf(stream,(char * )NULL,_IOLBF,0);請參考setvbuf()。
返回值
setvbuf(設置文件流的緩衝區)
相關函數 setbuffer,setlinebuf,setbuf
表頭文件 #includestdio.h
定義函數 int setvbuf(FILE * stream,char * buf,int mode,size_t size);
函數說明 在打開文件流後,讀取內容之前,調用setvbuf()可以用來設置文件流的緩衝區。參數stream為指定的文件流,參數buf指向自定的緩衝區起始地址,參數size為緩衝區大小,參數mode有下列幾種
_IONBF 無緩衝IO
_IOLBF 以換行為依據的無緩衝IO
_IOFBF 完全無緩衝IO。如果參數buf為NULL指針,則為無緩衝IO。
返回值
ungetc(將指定字元寫迴文件流中)
相關函數 fputc,getchar,getc
表頭文件 #includestdio.h
定義函數 int ungetc(int c,FILE * stream);
函數說明 ungetc()將參數c字元寫回參數stream所指定的文件流。這個寫回的字元會由下一個讀取文件流的函數取得。
返回值 成功則返回c 字元,若有錯誤則返回EOF。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/307302.html