回覆列表
  • 1 # 個范文芳

    clearerr(清除檔案流的錯誤旗標)

    相關函式feof

    表頭檔案#include<stdio.h>

    定義函式voidclearerr(FILE*stream);

    函式說明clearerr()清除引數stream指定的檔案流所使用的錯誤旗標。

    返回值

    fclose(關閉檔案)

    相關函式close,fflush,fopen,setbuf

    表頭檔案#include<stdio.h>

    定義函式intfclose(FILE*stream);

    函式說明fclose()用來關閉先前fopen()開啟的檔案。此動作會讓緩衝區內的資料寫入檔案中,並釋放系統所提供的檔案資源。

    返回值若關檔案動作成功則返回0,有錯誤發生時則返回EOF並把錯誤程式碼存到errno。

    錯誤程式碼EBADF表示引數stream非已開啟的檔案。

    範例請參考fopen()。

    fdopen(將檔案描述詞轉為檔案指標)

    相關函式fopen,open,fclose

    表頭檔案#include<stdio.h>

    定義函式FILE*fdopen(intfildes,constchar*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>

    定義函式intfeof(FILE*stream);

    函式說明feof()用來偵測是否讀取到了檔案尾,尾數stream為fopen()所返回之檔案指標。如果已到檔案尾則返回非零值,其他情況返回0。

    返回值返回非零值代表已到達檔案尾。

    fflush(更新緩衝區)

    相關函式write,fopen,fclose,setbuf

    表頭檔案#include<stdio.h>

    定義函式intfflush(FILE*stream);

    函式說明fflush()會強迫將緩衝區內的資料寫回引數stream指定的檔案中。如果引數stream為NULL,fflush()會將所有開啟的檔案資料更新。

    返回值成功返回0,失敗返回EOF,錯誤程式碼存於errno中。

    錯誤程式碼EBADF引數stream指定的檔案未被開啟,或開啟狀態為只讀。其它錯誤程式碼參考write()。

    fgetc(由檔案中讀取一個字元)

    相關函式open,fread,fscanf,getc

    表頭檔案include<stdio.h>

    定義函式ntfgetc(FILE*stream);

    函式說明fgetc()從引數stream所指的檔案中讀取一個字元。若讀到檔案尾而無資料時便返回EOF。

    返回值getc()會返回讀取到的字元,若返回EOF則表示到了檔案尾。

    範例

    #include<stdio.h>

    main()

    {

    FILE*fp;

    intc;

    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,intsize,FILE*stream);

    函式說明fgets()用來從引數stream所指的檔案內讀入字元並存到引數s所指的記憶體空間,直到出現換行字元、讀到檔案尾或是已讀了size-1個字元為止,最後會加上NULL作為字串結束。

    返回值gets()若成功則返回s指標,返回NULL則表示有錯誤發生。

    範例

    #include<stdio.h>

    main()

    {

    chars[80];

    fputs(fgets(s,80,stdin),stdout);

    }

    執行thisisatest/*輸入*/

    thisisatest/*輸出*/

    fileno(返回檔案流所使用的檔案描述詞)

    相關函式open,fopen

    表頭檔案#include<stdio.h>

    定義函式intfileno(FILE*stream);

    函式說明fileno()用來取得引數stream指定的檔案流所使用的檔案描述詞。

    返回值返回檔案描述詞。

    範例

    #include<stdio.h>

    main()

    {

    FILE*fp;

    intfd;

    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(constchar*path,constchar*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>

    定義函式intfputc(intc,FILE*stream);

    函式說明fputc會將引數c轉為unsignedchar後寫入引數stream指定的檔案中。

    返回值fputc()會返回寫入成功的字元,即引數c。若返回EOF則代表寫入失敗。

    範例

    #include<stdio.h>

    main()

    {

    FILE*fp;

    chara[26]=”abcdefghijklmnopqrstuvwxyz”;

    inti;

    fp=fopen(“noexist”,”w”);

    for(i=0;i<26;i++)

    fputc(a,fp);

    fclose(fp);

    }

    fputs(將一指定的字串寫入檔案內)

    相關函式fopen,fwrite,fscanf,fputc,putc

    表頭檔案#include<stdio.h>

    定義函式intfputs(constchar*s,FILE*stream);

    函式說明fputs()用來將引數s所指的字串寫入到引數stream所指的檔案內。

    返回值若成功則返回寫出的字元個數,返回EOF則表示有錯誤發生。

    範例請參考fgets()。

    fread(從檔案流讀取資料)

    相關函式fopen,fwrite,fseek,fscanf

    表頭檔案#include<stdio.h>

    定義函式size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream);

    函式說明fread()用來從檔案流中讀取資料。引數stream為已開啟的檔案指標,引數ptr指向欲存放讀取進來的資料空間,讀取的字元數以引數size*nmemb來決定。Fread()會返回實際讀取到的nmemb數目,如果此值比引數nmemb來得小,則代表可能讀到了檔案尾或有錯誤發生,這時必須用feof()或ferror()來決定發生什麼情況。

    返回值返回實際讀取到的nmemb數目。

    附加說明

    範例

    #include<stdio.h>

    #definenmemb3

    structtest

    {

    charname[20];

    intsize;

    }s[nmemb];

    intmain(){

    FILE*stream;

    inti;

    stream=fopen(“/tmp/fwrite”,”r”);

    fread(s,sizeof(structtest),nmemb,stream);

    fclose(stream);

    for(i=0;i<nmemb;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]=Windows2000size[2]=11

    freopen(開啟檔案)

    相關函式fopen,fclose

    表頭檔案#include<stdio.h>

    定義函式FILE*freopen(constchar*path,constchar*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>

    定義函式intfseek(FILE*stream,longoffset,intwhence);

    函式說明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;

    longoffset;

    fpos_tpos;

    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>

    定義函式longftell(FILE*stream);

    函式說明ftell()用來取得檔案流目前的讀寫位置。引數stream為已開啟的檔案指標。

    返回值當呼叫成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤程式碼。

    錯誤程式碼EBADF引數stream無效或可移動讀寫位置的檔案流。

    範例參考fseek()。

    fwrite(將資料寫至檔案流)

    相關函式fopen,fread,fseek,fscanf

    表頭檔案#include<stdio.h>

    定義函式size_tfwrite(constvoid*ptr,size_tsize,size_tnmemb,FILE*stream);

    函式說明fwrite()用來將資料寫入檔案流中。引數stream為已開啟的檔案指標,引數ptr指向欲寫入的資料地址,總共寫入的字元數以引數size*nmemb來決定。Fwrite()會返回實際寫入的nmemb數目。

    返回值返回實際寫入的nmemb數目。

    範例

    #include<stdio.h>

    #defineset_s(x,y){strcoy(s[x].name,y);s[x].size=strlen(y);}

    #definenmemb3

    structtest

    {

    charname[20];

    intsize;

    }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(structtest),nmemb,stream);

    fclose(stream);

    }

    執行參考fread()。

    getc(由檔案中讀取一個字元)

    相關函式read,fopen,fread,fgetc

    表頭檔案#include<stdio.h>

    定義函式intgetc(FILE*stream);

    函式說明getc()用來從引數stream所指的檔案中讀取一個字元。若讀到檔案尾而無資料時便返回EOF。雖然getc()與fgetc()作用相同,但getc()為宏定義,非真正的函式呼叫。

    返回值getc()會返回讀取到的字元,若返回EOF則表示到了檔案尾。

    範例參考fgetc()。

    getchar(由標準輸入裝置內讀進一字元)

    相關函式fopen,fread,fscanf,getc

    表頭檔案#include<stdio.h>

    定義函式intgetchar(void);

    函式說明getchar()用來從標準輸入裝置中讀取一個字元。然後將該字元從unsignedchar轉換成int後返回。

    返回值getchar()會返回讀取到的字元,若返回EOF則表示有錯誤發生。

    附加說明getchar()非真正函式,而是getc(stdin)宏定義。

    範例

    #include<stdio.h>

    main()

    {

    FILE*fp;

    intc,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所指的檔名稱字串必須宣告為陣列,如:

    chartemplate[]=”template-XXXXXX”;

    不可用char*template=”template-XXXXXX”;

    範例

    #include<stdlib.h>

    main()

    {

    chartemplate[]=”template-XXXXXX”;

    mktemp(template);

    printf(“template=%s\n”,template);

    }

    putc(將一指定字元寫入檔案中)

    相關函式fopen,fwrite,fscanf,fputc

    表頭檔案#include<stdio.h>

    定義函式intputc(intc,FILE*stream);

    函式說明putc()會將引數c轉為unsignedchar後寫入引數stream指定的檔案中。雖然putc()與fputc()作用相同,但putc()為宏定義,非真正的函式呼叫。

    返回值putc()會返回寫入成功的字元,即引數c。若返回EOF則代表寫入失敗。

    範例參考fputc()。

    putchar(將指定的字元寫到標準輸出裝置)

    相關函式fopen,fwrite,fscanf,fputc

    表頭檔案#include<stdio.h>

    定義函式intputchar(intc);

    函式說明putchar()用來將引數c字元寫到標準輸出裝置。

    返回值putchar()會返回輸出成功的字元,即引數c。若返回EOF則代表輸出失敗。

    附加說明putchar()非真正函式,而是putc(c,stdout)宏定義。

    範例參考getchar()。

    rewind(重設檔案流的讀寫位置為檔案開頭)

    相關函式fseek,ftell,fgetpos,fsetpos

    表頭檔案#include<stdio.h>

    定義函式voidrewind(FILE*stream);

    函式說明rewind()用來把檔案流的讀寫位置移至檔案開頭。引數stream為已開啟的檔案指標。此函式相當於呼叫fseek(stream,0,SEEK_SET)。

    返回值

    範例參考fseek()

    setbuf(設定檔案流的緩衝區)

    相關函式setbuffer,setlinebuf,setvbuf

    表頭檔案#include<stdio.h>

    定義函式voidsetbuf(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>

    定義函式voidsetbuffer(FILE*stream,char*buf,size_tsize);

    函式說明在開啟檔案流後,讀取內容之前,呼叫setbuffer()可用來設定檔案流的緩衝區。引數stream為指定的檔案流,引數buf指向自定的緩衝區起始地址,引數size為緩衝區大小。

    返回值

    setlinebuf(設定檔案流為線性緩衝區)

    相關函式setbuffer,setbuf,setvbuf

    表頭檔案#include<stdio.h>

    定義函式voidsetlinebuf(FILE*stream);

    函式說明setlinebuf()用來設定檔案流以換行為依據的無緩衝IO。相當於呼叫:setvbuf(stream,(char*)NULL,_IOLBF,0);請參考setvbuf()。

    返回值

    setvbuf(設定檔案流的緩衝區)

    相關函式setbuffer,setlinebuf,setbuf

    表頭檔案#include<stdio.h>

    定義函式intsetvbuf(FILE*stream,char*buf,intmode,size_tsize);

    函式說明在開啟檔案流後,讀取內容之前,呼叫setvbuf()可以用來設定檔案流的緩衝區。引數stream為指定的檔案流,引數buf指向自定的緩衝區起始地址,引數size為緩衝區大小,引數mode有下列幾種

    _IONBF無緩衝IO

    _IOLBF以換行為依據的無緩衝IO

    _IOFBF完全無緩衝IO。如果引數buf為NULL指標,則為無緩衝IO。

    返回值

    ungetc(將指定字元寫回檔案流中)

    相關函式fputc,getchar,getc

    表頭檔案#include<stdio.h>

    定義函式intungetc(intc,FILE*stream);

    函式說明ungetc()將引數c字元寫回引數stream所指定的檔案流。這個寫回的字元會由下一個讀取檔案流的函式取得。

    返回值成功則返回c字元,若有錯誤則返回EOF。

  • 2 # 個范文芳

    clearerr(清除檔案流的錯誤旗標)

    相關函式feof

    表頭檔案#include<stdio.h>

    定義函式voidclearerr(FILE*stream);

    函式說明clearerr()清除引數stream指定的檔案流所使用的錯誤旗標。

    返回值

    fclose(關閉檔案)

    相關函式close,fflush,fopen,setbuf

    表頭檔案#include<stdio.h>

    定義函式intfclose(FILE*stream);

    函式說明fclose()用來關閉先前fopen()開啟的檔案。此動作會讓緩衝區內的資料寫入檔案中,並釋放系統所提供的檔案資源。

    返回值若關檔案動作成功則返回0,有錯誤發生時則返回EOF並把錯誤程式碼存到errno。

    錯誤程式碼EBADF表示引數stream非已開啟的檔案。

    範例請參考fopen()。

    fdopen(將檔案描述詞轉為檔案指標)

    相關函式fopen,open,fclose

    表頭檔案#include<stdio.h>

    定義函式FILE*fdopen(intfildes,constchar*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>

    定義函式intfeof(FILE*stream);

    函式說明feof()用來偵測是否讀取到了檔案尾,尾數stream為fopen()所返回之檔案指標。如果已到檔案尾則返回非零值,其他情況返回0。

    返回值返回非零值代表已到達檔案尾。

    fflush(更新緩衝區)

    相關函式write,fopen,fclose,setbuf

    表頭檔案#include<stdio.h>

    定義函式intfflush(FILE*stream);

    函式說明fflush()會強迫將緩衝區內的資料寫回引數stream指定的檔案中。如果引數stream為NULL,fflush()會將所有開啟的檔案資料更新。

    返回值成功返回0,失敗返回EOF,錯誤程式碼存於errno中。

    錯誤程式碼EBADF引數stream指定的檔案未被開啟,或開啟狀態為只讀。其它錯誤程式碼參考write()。

    fgetc(由檔案中讀取一個字元)

    相關函式open,fread,fscanf,getc

    表頭檔案include<stdio.h>

    定義函式ntfgetc(FILE*stream);

    函式說明fgetc()從引數stream所指的檔案中讀取一個字元。若讀到檔案尾而無資料時便返回EOF。

    返回值getc()會返回讀取到的字元,若返回EOF則表示到了檔案尾。

    範例

    #include<stdio.h>

    main()

    {

    FILE*fp;

    intc;

    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,intsize,FILE*stream);

    函式說明fgets()用來從引數stream所指的檔案內讀入字元並存到引數s所指的記憶體空間,直到出現換行字元、讀到檔案尾或是已讀了size-1個字元為止,最後會加上NULL作為字串結束。

    返回值gets()若成功則返回s指標,返回NULL則表示有錯誤發生。

    範例

    #include<stdio.h>

    main()

    {

    chars[80];

    fputs(fgets(s,80,stdin),stdout);

    }

    執行thisisatest/*輸入*/

    thisisatest/*輸出*/

    fileno(返回檔案流所使用的檔案描述詞)

    相關函式open,fopen

    表頭檔案#include<stdio.h>

    定義函式intfileno(FILE*stream);

    函式說明fileno()用來取得引數stream指定的檔案流所使用的檔案描述詞。

    返回值返回檔案描述詞。

    範例

    #include<stdio.h>

    main()

    {

    FILE*fp;

    intfd;

    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(constchar*path,constchar*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>

    定義函式intfputc(intc,FILE*stream);

    函式說明fputc會將引數c轉為unsignedchar後寫入引數stream指定的檔案中。

    返回值fputc()會返回寫入成功的字元,即引數c。若返回EOF則代表寫入失敗。

    範例

    #include<stdio.h>

    main()

    {

    FILE*fp;

    chara[26]=”abcdefghijklmnopqrstuvwxyz”;

    inti;

    fp=fopen(“noexist”,”w”);

    for(i=0;i<26;i++)

    fputc(a,fp);

    fclose(fp);

    }

    fputs(將一指定的字串寫入檔案內)

    相關函式fopen,fwrite,fscanf,fputc,putc

    表頭檔案#include<stdio.h>

    定義函式intfputs(constchar*s,FILE*stream);

    函式說明fputs()用來將引數s所指的字串寫入到引數stream所指的檔案內。

    返回值若成功則返回寫出的字元個數,返回EOF則表示有錯誤發生。

    範例請參考fgets()。

    fread(從檔案流讀取資料)

    相關函式fopen,fwrite,fseek,fscanf

    表頭檔案#include<stdio.h>

    定義函式size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream);

    函式說明fread()用來從檔案流中讀取資料。引數stream為已開啟的檔案指標,引數ptr指向欲存放讀取進來的資料空間,讀取的字元數以引數size*nmemb來決定。Fread()會返回實際讀取到的nmemb數目,如果此值比引數nmemb來得小,則代表可能讀到了檔案尾或有錯誤發生,這時必須用feof()或ferror()來決定發生什麼情況。

    返回值返回實際讀取到的nmemb數目。

    附加說明

    範例

    #include<stdio.h>

    #definenmemb3

    structtest

    {

    charname[20];

    intsize;

    }s[nmemb];

    intmain(){

    FILE*stream;

    inti;

    stream=fopen(“/tmp/fwrite”,”r”);

    fread(s,sizeof(structtest),nmemb,stream);

    fclose(stream);

    for(i=0;i<nmemb;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]=Windows2000size[2]=11

    freopen(開啟檔案)

    相關函式fopen,fclose

    表頭檔案#include<stdio.h>

    定義函式FILE*freopen(constchar*path,constchar*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>

    定義函式intfseek(FILE*stream,longoffset,intwhence);

    函式說明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;

    longoffset;

    fpos_tpos;

    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>

    定義函式longftell(FILE*stream);

    函式說明ftell()用來取得檔案流目前的讀寫位置。引數stream為已開啟的檔案指標。

    返回值當呼叫成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤程式碼。

    錯誤程式碼EBADF引數stream無效或可移動讀寫位置的檔案流。

    範例參考fseek()。

    fwrite(將資料寫至檔案流)

    相關函式fopen,fread,fseek,fscanf

    表頭檔案#include<stdio.h>

    定義函式size_tfwrite(constvoid*ptr,size_tsize,size_tnmemb,FILE*stream);

    函式說明fwrite()用來將資料寫入檔案流中。引數stream為已開啟的檔案指標,引數ptr指向欲寫入的資料地址,總共寫入的字元數以引數size*nmemb來決定。Fwrite()會返回實際寫入的nmemb數目。

    返回值返回實際寫入的nmemb數目。

    範例

    #include<stdio.h>

    #defineset_s(x,y){strcoy(s[x].name,y);s[x].size=strlen(y);}

    #definenmemb3

    structtest

    {

    charname[20];

    intsize;

    }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(structtest),nmemb,stream);

    fclose(stream);

    }

    執行參考fread()。

    getc(由檔案中讀取一個字元)

    相關函式read,fopen,fread,fgetc

    表頭檔案#include<stdio.h>

    定義函式intgetc(FILE*stream);

    函式說明getc()用來從引數stream所指的檔案中讀取一個字元。若讀到檔案尾而無資料時便返回EOF。雖然getc()與fgetc()作用相同,但getc()為宏定義,非真正的函式呼叫。

    返回值getc()會返回讀取到的字元,若返回EOF則表示到了檔案尾。

    範例參考fgetc()。

    getchar(由標準輸入裝置內讀進一字元)

    相關函式fopen,fread,fscanf,getc

    表頭檔案#include<stdio.h>

    定義函式intgetchar(void);

    函式說明getchar()用來從標準輸入裝置中讀取一個字元。然後將該字元從unsignedchar轉換成int後返回。

    返回值getchar()會返回讀取到的字元,若返回EOF則表示有錯誤發生。

    附加說明getchar()非真正函式,而是getc(stdin)宏定義。

    範例

    #include<stdio.h>

    main()

    {

    FILE*fp;

    intc,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所指的檔名稱字串必須宣告為陣列,如:

    chartemplate[]=”template-XXXXXX”;

    不可用char*template=”template-XXXXXX”;

    範例

    #include<stdlib.h>

    main()

    {

    chartemplate[]=”template-XXXXXX”;

    mktemp(template);

    printf(“template=%s\n”,template);

    }

    putc(將一指定字元寫入檔案中)

    相關函式fopen,fwrite,fscanf,fputc

    表頭檔案#include<stdio.h>

    定義函式intputc(intc,FILE*stream);

    函式說明putc()會將引數c轉為unsignedchar後寫入引數stream指定的檔案中。雖然putc()與fputc()作用相同,但putc()為宏定義,非真正的函式呼叫。

    返回值putc()會返回寫入成功的字元,即引數c。若返回EOF則代表寫入失敗。

    範例參考fputc()。

    putchar(將指定的字元寫到標準輸出裝置)

    相關函式fopen,fwrite,fscanf,fputc

    表頭檔案#include<stdio.h>

    定義函式intputchar(intc);

    函式說明putchar()用來將引數c字元寫到標準輸出裝置。

    返回值putchar()會返回輸出成功的字元,即引數c。若返回EOF則代表輸出失敗。

    附加說明putchar()非真正函式,而是putc(c,stdout)宏定義。

    範例參考getchar()。

    rewind(重設檔案流的讀寫位置為檔案開頭)

    相關函式fseek,ftell,fgetpos,fsetpos

    表頭檔案#include<stdio.h>

    定義函式voidrewind(FILE*stream);

    函式說明rewind()用來把檔案流的讀寫位置移至檔案開頭。引數stream為已開啟的檔案指標。此函式相當於呼叫fseek(stream,0,SEEK_SET)。

    返回值

    範例參考fseek()

    setbuf(設定檔案流的緩衝區)

    相關函式setbuffer,setlinebuf,setvbuf

    表頭檔案#include<stdio.h>

    定義函式voidsetbuf(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>

    定義函式voidsetbuffer(FILE*stream,char*buf,size_tsize);

    函式說明在開啟檔案流後,讀取內容之前,呼叫setbuffer()可用來設定檔案流的緩衝區。引數stream為指定的檔案流,引數buf指向自定的緩衝區起始地址,引數size為緩衝區大小。

    返回值

    setlinebuf(設定檔案流為線性緩衝區)

    相關函式setbuffer,setbuf,setvbuf

    表頭檔案#include<stdio.h>

    定義函式voidsetlinebuf(FILE*stream);

    函式說明setlinebuf()用來設定檔案流以換行為依據的無緩衝IO。相當於呼叫:setvbuf(stream,(char*)NULL,_IOLBF,0);請參考setvbuf()。

    返回值

    setvbuf(設定檔案流的緩衝區)

    相關函式setbuffer,setlinebuf,setbuf

    表頭檔案#include<stdio.h>

    定義函式intsetvbuf(FILE*stream,char*buf,intmode,size_tsize);

    函式說明在開啟檔案流後,讀取內容之前,呼叫setvbuf()可以用來設定檔案流的緩衝區。引數stream為指定的檔案流,引數buf指向自定的緩衝區起始地址,引數size為緩衝區大小,引數mode有下列幾種

    _IONBF無緩衝IO

    _IOLBF以換行為依據的無緩衝IO

    _IOFBF完全無緩衝IO。如果引數buf為NULL指標,則為無緩衝IO。

    返回值

    ungetc(將指定字元寫回檔案流中)

    相關函式fputc,getchar,getc

    表頭檔案#include<stdio.h>

    定義函式intungetc(intc,FILE*stream);

    函式說明ungetc()將引數c字元寫回引數stream所指定的檔案流。這個寫回的字元會由下一個讀取檔案流的函式取得。

    返回值成功則返回c字元,若有錯誤則返回EOF。

  • 中秋節和大豐收的關聯?
  • 作為實體店鋪如何線上引流?有什麼軟體可以幫助營銷?