|
clearerr(清除文件流的錯誤旗標) |
相關函數
|
feof |
表頭文件
|
#include<stdio.h> |
定義函數
|
void clearerr(FILE * stream); |
函數說明
|
clearerr()清除參數stream指定的文件流所使用的錯誤旗標。 |
返回值
|
|
|
fclose(關閉文件) |
相關函數
|
close,fflush,fopen,setbuf |
表頭文件
|
#include<stdio.h> |
定義函數
|
int fclose(FILE * stream); |
函數說明
|
fclose()用來關閉先前fopen()打開的文件。此動作會讓緩衝區內的數據寫入文件中,並釋放系統所提供的文件資源。 |
返回值
|
若關文件動作成功則返回0,有錯誤發生時則返回EOF並把錯誤代碼存到errno。 |
錯誤代碼
|
EBADF表示參數stream非已打開的文件。 |
範例
|
請參考fopen()。 |
|
fdopen(將文件描述詞轉為文件指針) |
相關函數
|
fopen,open,fclose |
表頭文件
|
#include<stdio.h> |
定義函數
|
FILE * fdopen(int fildes,const char * mode); |
函數說明
|
fdopen()會將參數fildes 的文件描述詞,轉換為對應的文件指針後返回。參數mode
字符串則代表著文件指針的流形態,此形態必須和原先文件描述詞讀寫模式相同。關於mode 字符串格式請參考fopen()。 |
返回值
|
轉換成功時返回指向該流的文件指針。失敗則返回NULL,並把錯誤代碼存在errno中。 |
範例
|
#include<stdio.h> main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } |
執行
|
hello! |
|
feof(檢查文件流是否讀到了文件尾) |
相關函數
|
fopen,fgetc,fgets,fread |
表頭文件
|
#include<stdio.h> |
定義函數
|
int feof(FILE * stream); |
函數說明
|
feof()用來偵測是否讀取到了文件尾,尾數stream為fopen()所返回之文件指針。如果已到文件尾則返回非零值,其他情況返回0。 |
返回值
|
返回非零值代表已到達文件尾。 |
|
fflush(更新緩衝區) |
相關函數
|
write,fopen,fclose,setbuf |
表頭文件
|
#include<stdio.h> |
定義函數
|
int fflush(FILE* stream); |
函數說明
|
fflush()會強迫將緩衝區內的數據寫回參數stream指定的文件中。如果參數stream為NULL,fflush()會將所有打開的文件數據更新。 |
返回值
|
成功返回0,失敗返回EOF,錯誤代碼存於errno中。 |
錯誤代碼
|
EBADF 參數stream 指定的文件未被打開,或打開狀態為只讀。其它錯誤代碼參考write()。 |
|
fgetc(由文件中讀取一個字符) |
相關函數
|
open,fread,fscanf,getc |
表頭文件
|
include<stdio.h> |
定義函數
|
nt fgetc(FILE * stream); |
函數說明
|
fgetc()從參數stream所指的文件中讀取一個字符。若讀到文件尾而無數據時便返回EOF。 |
返回值
|
getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。 |
範例
|
#include<stdio.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 |
表頭文件
|
include<stdio.h> |
定義函數
|
har * fgets(char * s,int size,FILE * stream); |
函數說明
|
fgets()用來從參數stream所指的文件內讀入字符並存到參數s所指的內存空間,直到出現換行字符、讀到文件尾或是已讀了size-1個字符為止,最後會加上NULL作為字符串結束。 |
返回值
|
gets()若成功則返回s指針,返回NULL則表示有錯誤發生。 |
範例
|
#include<stdio.h> main() { char s[80]; fputs(fgets(s,80,stdin),stdout); } |
執行
|
this is a test /*輸入*/ this is a test /*輸出*/ |
|
fileno(返迴文件流所使用的文件描述詞) |
相關函數
|
open,fopen |
表頭文件
|
#include<stdio.h> |
定義函數
|
int fileno(FILE * stream); |
函數說明
|
fileno()用來取得參數stream指定的文件流所使用的文件描述詞。 |
返回值
|
返迴文件描述詞。 |
範例
|
#include<stdio.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 |
表頭文件
|
#include<stdio.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()後請作錯誤判斷及處理。 |
範例
|
#include<stdio.h> main() { FILE * fp; fp=fopen(“noexist”,”a+”); if(fp= =NULL) return; fclose(fp); } |
|
fputc(將一指定字符寫入文件流中) |
相關函數
|
fopen,fwrite,fscanf,putc |
表頭文件
|
#include<stdio.h> |
定義函數
|
int fputc(int c,FILE * stream); |
函數說明
|
fputc 會將參數c 轉為unsigned char 後寫入參數stream 指定的文件中。 |
返回值
|
fputc()會返回寫入成功的字符,即參數c。若返回EOF則代表寫入失敗。 |
範例
|
#include<stdio.h> main() { FILE * fp; char a[26]=”abcdefghijklmnopqrstuvwxyz”; int i; fp= fopen(“noexist”,”w”); for(i=0;i<26;i++) fputc(a[i],fp); fclose(fp); } |
|
fputs(將一指定的字符串寫入文件內) |
相關函數
|
fopen,fwrite,fscanf,fputc,putc |
表頭文件
|
#include<stdio.h> |
定義函數
|
int fputs(const char * s,FILE * stream); |
函數說明
|
fputs()用來將參數s所指的字符串寫入到參數stream所指的文件內。 |
返回值
|
若成功則返回寫出的字符個數,返回EOF則表示有錯誤發生。 |
範例
|
請參考fgets()。 |
|
fread(從文件流讀取數據) |
相關函數
|
fopen,fwrite,fseek,fscanf |
表頭文件
|
#include<stdio.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數目。 |
附加說明
|
|
範例
|
#include<stdio.h> #define nmemb 3 struct test { char name[20]; int size; }s[nmemb]; main() { FILE * stream; int i; stream = fopen(“/tmp/fwrite”,”r”); fread(s,sizeof(struct test),nmemb,stream); fclose(stream); for(i=0;i<nmemb;i++) printf(“name[%d]=%-20s:size[%d]=%d\n”,i,s[i].name,i,s[i].size); } |
執行
|
name[0]=Linux! size[0]=6 name[1]=FreeBSD! size[1]=8 name[2]=Windows2000 size[2]=11 |
|
freopen(打開文件) |
相關函數
|
fopen,fclose |
表頭文件
|
#include<stdio.h> |
定義函數
|
FILE * freopen(const char * path,const char
* mode,FILE * stream); |
函數說明
|
參數path字符串包含欲打開的文件路徑及文件名,參數mode請參考fopen()說明。參數stream為已打開的文件指針。Freopen()會將原stream所打開的文件流關閉,然後打開參數path的文件。 |
返回值
|
文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno
中。 |
範例
|
#include<stdio.h> main() { FILE * fp; fp=fopen(“/etc/passwd”,”r”); fp=freopen(“/etc/group”,”r”,fp); fclose(fp); } |
|
fseek(移動文件流的讀寫位置) |
相關函數
|
rewind,ftell,fgetpos,fsetpos,lseek |
表頭文件
|
#include<stdio.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()來取得目前讀寫的位置。 |
範例
|
#include<stdio.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 |
表頭文件
|
#include<stdio.h> |
定義函數
|
long ftell(FILE * stream); |
函數說明
|
ftell()用來取得文件流目前的讀寫位置。參數stream為已打開的文件指針。 |
返回值
|
當調用成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤代碼。 |
錯誤代碼
|
EBADF 參數stream無效或可移動讀寫位置的文件流。 |
範例
|
參考fseek()。 |
|
fwrite(將數據寫至文件流) |
相關函數
|
fopen,fread,fseek,fscanf |
表頭文件
|
#include<stdio.h> |
定義函數
|
size_t fwrite(const void * ptr,size_t size,size_t
nmemb,FILE * stream); |
函數說明
|
fwrite()用來將數據寫入文件流中。參數stream為已打開的文件指針,參數ptr
指向欲寫入的數據地址,總共寫入的字符數以參數size*nmemb來決定。Fwrite()會返回實際寫入的nmemb數目。 |
返回值
|
返回實際寫入的nmemb數目。 |
範例
|
#include<stdio.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 |
表頭文件
|
#include<stdio.h> |
定義函數
|
int getc(FILE * stream); |
函數說明
|
getc()用來從參數stream所指的文件中讀取一個字符。若讀到文件尾而無數據時便返回EOF。雖然getc()與fgetc()作用相同,但getc()為宏定義,非真正的函數調用。 |
返回值
|
getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。 |
範例
|
參考fgetc()。 |
|
getchar(由標準輸入設備內讀進一字符) |
相關函數
|
fopen,fread,fscanf,getc |
表頭文件
|
#include<stdio.h> |
定義函數
|
int getchar(void); |
函數說明
|
getchar()用來從標準輸入設備中讀取一個字符。然後將該字符從unsigned char轉換成int後返回。 |
返回值
|
getchar()會返回讀取到的字符,若返回EOF則表示有錯誤發生。 |
附加說明
|
getchar()非真正函數,而是getc(stdin)宏定義。 |
範例
|
#include<stdio.h> main() { FILE * fp; int c,i; for(i=0li<5;i++) { c=getchar(); putchar(c); } } |
執行
|
1234 /*輸入*/ 1234 /*輸出*/ |
|
gets(由標準輸入設備內讀進一字符串) |
相關函數
|
fopen,fread,fscanf,fgets |
表頭文件
|
#include<stdio.h> |
定義函數
|
char * gets(char *s); |
函數說明
|
gets()用來從標準設備讀入字符並存到參數s所指的內存空間,直到出現換行字符或讀到文件尾為止,最後加上NULL作為字符串結束。 |
返回值
|
gets()若成功則返回s指針,返回NULL則表示有錯誤發生。 |
附加說明
|
由於gets()無法知道字符串s的大小,必須遇到換行字符或文件尾才會結束輸入,因此容易造成緩衝溢出的安全性問題。建議使用fgets()取代。 |
範例
|
參考fgets() |
|
mktemp(產生唯一的臨時文件名) |
相關函數
|
tmpfile |
表頭文件
|
#include<stdlib.h> |
定義函數
|
char * mktemp(char * template); |
函數說明
|
mktemp()用來產生唯一的臨時文件名。參數template所指的文件名稱字符串中最後六個字符必須是XXXXXX。產生後的文件名會借字符串指針返回。 |
返回值
|
文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。 |
附加說明
|
參數template所指的文件名稱字符串必須聲明為數組,如: char template[ ]=”template-XXXXXX”; 不可用char * template=”template-XXXXXX”; |
範例
|
#include<stdlib.h> main() { char template[ ]=”template-XXXXXX”; mktemp(template); printf(“template=%s\n”,template); } |
|
putc(將一指定字符寫入文件中) |
相關函數
|
fopen,fwrite,fscanf,fputc |
表頭文件
|
#include<stdio.h> |
定義函數
|
int putc(int c,FILE * stream); |
函數說明
|
putc()會將參數c轉為unsigned char後寫入參數stream指定的文件中。雖然putc()與fputc()作用相同,但putc()為宏定義,非真正的函數調用。 |
返回值
|
putc()會返回寫入成功的字符,即參數c。若返回EOF則代表寫入失敗。 |
範例
|
參考fputc()。 |
|
putchar(將指定的字符寫到標準輸出設備) |
相關函數
|
fopen,fwrite,fscanf,fputc |
表頭文件
|
#include<stdio.h> |
定義函數
|
int putchar (int c); |
函數說明
|
putchar()用來將參數c字符寫到標準輸出設備。 |
返回值
|
putchar()會返回輸出成功的字符,即參數c。若返回EOF則代表輸出失敗。 |
附加說明
|
putchar()非真正函數,而是putc(c,stdout)宏定義。 |
範例
|
參考getchar()。 |
|
rewind(重設文件流的讀寫位置為文件開頭) |
相關函數
|
fseek,ftell,fgetpos,fsetpos |
表頭文件
|
#include<stdio.h> |
定義函數
|
void rewind(FILE * stream); |
函數說明
|
rewind()用來把文件流的讀寫位置移至文件開頭。參數stream為已打開的文件指針。此函數相當於調用fseek(stream,0,SEEK_SET)。 |
返回值
|
|
範例
|
參考fseek() |
|
setbuf(設置文件流的緩衝區) |
相關函數
|
setbuffer,setlinebuf,setvbuf |
表頭文件
|
#include<stdio.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 |
表頭文件
|
#include<stdio.h> |
定義函數
|
void setbuffer(FILE * stream,char * buf,size_t
size); |
函數說明
|
在打開文件流後,讀取內容之前,調用setbuffer()可用來設置文件流的緩衝區。參數stream為指定的文件流,參數buf指向自定的緩衝區起始地址,參數size為緩衝區大小。 |
返回值
|
|
|
setlinebuf(設置文件流為線性緩衝區) |
相關函數
|
setbuffer,setbuf,setvbuf |
表頭文件
|
#include<stdio.h> |
定義函數
|
void setlinebuf(FILE * stream); |
函數說明
|
setlinebuf()用來設置文件流以換行為依據的無緩衝IO。相當於調用:setvbuf(stream,(char
* )NULL,_IOLBF,0);請參考setvbuf()。 |
返回值
|
|
|
setvbuf(設置文件流的緩衝區) |
相關函數
|
setbuffer,setlinebuf,setbuf |
表頭文件
|
#include<stdio.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 |
表頭文件
|
#include<stdio.h> |
定義函數
|
int ungetc(int c,FILE * stream); |
函數說明
|
ungetc()將參數c字符寫回參數stream所指定的文件流。這個寫回的字符會由下一個讀取文件流的函數取得。 |
返回值
|
成功則返回c 字符,若有錯誤則返回EOF。 |
|