1. 程式人生 > >C語言stdio標頭檔案包含內容介紹(常用函式用法簡介)

C語言stdio標頭檔案包含內容介紹(常用函式用法簡介)

結構體:

FILE 

  在stdio.h標頭檔案中定義的結構。一般來說,它用於對檔案進行操作的函式的引數或者返回值等等。它在標頭檔案中的定義如下(成員後面的註釋援引自百度知道,準確與否我查詢資料未果,到後來專門找個時間將FILE結構體解讀一下):
typedef struct _iobuf
{
    char*    _ptr;       // 檔案輸入的下一個位置
    int    _cnt;           // 當前緩衝區的相對位置
    char*    _base;      // 指基礎位置(即是檔案的起始位置)
    int    _flag;          // 檔案狀態標誌
    int    _file;          // 檔案的有效性驗證
    int    _charbuf;       // 檢查緩衝區狀況,如果無緩衝區則不讀取
    int    _bufsiz;        // 緩衝區大小
    char*    _tmpfname;  // 臨時檔名
} FILE;




基本型別:

fpos_t 

  一種型別,包含的指定在一個檔案中的位置的資訊(Object containing information to specify a position within a file)。是一種基本型別的別名,在MSVCRT下為long long,其它環境下為long。可見其定義:
#ifdef __MSVCRT__
typedef long long fpos_t;
#else
typedef long    fpos_t;
#endif

巨集常量 :

EOF 

  它作為cstdio標頭檔案裡一些函式的失敗指示返回值,或者當執行讀操作時檔案尾到達時產生了錯誤。
#define EOF (-1)




FILENAME_MAX 

  檔名的最大長度。這取決於作業系統,如果作業系統對此未作規定,則它將被設定為能裝下任何檔名的大小。
#define FILENAME_MAX (260)




TMP_MAX 

  臨時檔案最大個數。
#define TMP_MAX 32767




內建物件 :

stderr 

  FILE* stderr;
  標準錯誤流。標準錯誤流是錯誤資訊和其它診斷警告的預設目的地。與stdout一樣,它通常也被定位到標準控制檯輸出裝置。stderr可以被用於任何期望一個輸出流作為其中一個引數的函式比如fputs或fprintf等。雖然通常stdout和stderr都被關聯到同樣的控制檯輸出,程式為了區分發送到stdout與stderr的內容會將它們其中之一重定向。例如,常見的如果期望錯誤顯示在控制檯螢幕上時會將標準輸出重定向到一個檔案。在程式中也可以將stderr通過freopen函式重定向到其它地方。


stdin 

    FILE* stdin;
  標準輸入流。標準輸入流是程式的預設資料來源。它通常被重定向到標準控制檯的輸入裝置(通常是鍵盤)。stdin可以被用於任何期望一個輸入流作為其一個引數的函式,比如fgets或fscanf等。雖然通常認為stdin的資料來源是鍵盤是安全的,但是記住即使是在純控制檯系統中也可能不是這樣的,因為stdin能被重定向到作業系統級。例如,許多系統,包括DOS/Windows和大多數的UNIX外殼支援如下的命令語法:myapplication < example.txt 來使用example.txt的內容來作為myapplication的資料來源。當然在程式中也可以使用freopen函式來重定向stdin到其它來源。


stdout 

  FILE* stdout;
  標準輸出流。標準輸出流是程式的預設純輸出目的地。它通常被重定向到標準控制檯輸出裝置(通常是螢幕)。stdout可以被用於任何期望一個輸出流作為其一個引數的函式,比如fputs或fprintf。雖然通常認為stdout的目的地是螢幕是安全的,但是記住即使是在純控制檯系統中也可能不是這樣的,因為stdout能被重定向到作業系統級別。例如,許多作業系統,包括DOS/Windows和大多數的UNIX外殼支援如下的命令語法:myapplication > example.txt 來重定向myapplication的輸出到example.txt而不是螢幕。當然在程式中也可以使用freopen函式來重定向stdout到其它地方。




函式:

printf 

函式功能 :列印已格式化字串到標準輸出流。
函式用法 :int printf(const char* format, ...),其中format相關請參考上文中fprintf函式。返回所寫的總字元數,失敗則返回負數。
參考例子 :
#include <stdio.h>
                                                       
int main()
{
  char c='a';
  int i=97;
  printf("%c,%d\n",c,c);
  printf("%c,%d\n",i,i);
  return 0;
}




scanf 

函式功能 :從標準輸入流讀入指定格式的資料。引數一指定格式與附加引數個數與格式。
函式用法 :int scanf(const char* format, ...),其中format的相關內容參見fscanf函式的講解。返回成功讀取的專案數,即附加引數個數,這個數字可能比期望的專案少,匹配失敗時甚至可能是零。如果在任何資料被成功讀取之前出現輸入失敗,返回EOF。
參考例子 :
int main()
{
  int a,b,c;
  scanf("%d%d%d",&a,&b,&c);
  printf("%d,%d,%d\n",a,b,c);
  return 0;
}



sprintf 

函式功能 :將格式化的資料寫到字串。將format引數指定的資料序列(一個C風格字串)寫入到str。該函式的行為與printf類似,但它的結果是寫到一個字串而不是stdout。傳過來的接受字串必須有足夠大小裝納。
函式用法 :int sprintf(char *str, const char *format, ...),str是指向char陣列的指標,format相關請參見fprintf函式。成功則返回寫入總字元數,這個數字不包括最後自動新增的空字元。出錯則返回負數。
參考例子 ;
int main()
{
  int a,b,c;l
  char fileName[50+1];
  sprintf("%d,%d,%d\n",a,b,c);
  return 0;
}


sscanf 

  功能 :從字串中讀取指定格式資料。從指定字串中讀取資料並存儲到附加引數指定的位置。
  用法 :int sscanf(const char *str, const char* format, ...),其中format的相關內容參見fscanf函式的講解。返回成功讀取的專案數,即附加引數個數,這個數字可能比期望的少,匹配失敗時甚至可能是零。如果在任何資料被成功讀取之前出現輸入失敗,返回EOF。


fopen 

函式功能 :以指定的模式開啟指定名字的檔案,將其與一個可以對檔案進行操作的流進行關聯並返回FILE*。開啟模式決定了流能對檔案進行哪些操作。
函式用法 :fopen(const char* filename, const char* mode),返回FILE*。
mode可以為"r","w","a","+","b"幾種模式的組合,常見的組合如下:
  "r"   開啟檔案,並讀取檔案內容,若檔案不存在,將會發生錯誤。
  "w"   開啟檔案,並清除其內容,重新準備寫入資料,若檔案不存在,則建立新檔案。
  "a"   若檔案已存在,則新寫入的資料直接從檔案末端接入。
  "r+"  開啟檔案,可提供讀/寫,若檔案不存在,則發生錯誤。
  "w+"  開啟檔案,可提供讀/寫,若檔案已存在,則清除其內容。
  "a+"  開啟檔案,可提供讀/寫,但寫入資料僅能接在原始檔之後。
  "rb"  開啟二進位制檔案,並讀取檔案內容,若檔案不存在將發生錯誤。
  "wb"  開啟二進位制檔案,並清除其內容,重新準備寫入資料,若檔案不存在,則建立新檔案。
  "ab"  開啟二進位制檔案,若檔案已存在,則新寫入的資料直接從檔案末端接入。
  "r+b" 開啟二進位制檔案,可提供讀/寫,若檔案不存在,則發生錯誤。
  "w+b" 開啟二進位制檔案,可提供讀/寫,若檔案已存在,則清除其內容。
  "a+b" 開啟二進位制檔案,可提供讀/寫,但寫入資料僅能接在原始檔之後。
參考例子:
#include <stdlib.h>
#include <stdio.h>
#include <dir.h>
int main()
{
    char *s;
    char drive[MAXDRIVE];
    char dir[MAXDIR];
    char file[MAXFILE];
    char ext[MAXEXT];
    int flags;
    s=getenv("COMSPEC");
    flags=fnsplit(s,drive,dir,file,ext);
    printf("Command processor info:");
    if(flags&DRIVE)
        printf("\tdrive: %s",drive);
    if(flags&DIRECTORY)
        printf("\tdirectory: %s",dir);
    if(flags&FILENAME)
        printf("\tfile: %s",file);
    if(flags&EXTENSION)
        printf("\textension: %s",ext);
    return 0;
}



    

fprintf 

函式功能 :將格式化過的輸出寫到流。將資料序列以格式引數指定的格式化之後見到指定流。在格式引數之後函式還需要至少在格式引數裡指定的那麼多個引數。
函式用法 :fprint(FILE *pFile, const char *format, ...)。如果成功,寫入字元總數將被作為int型返回,否則將返回負值。其中format引數中指定附加引數時格式為:
  %[flags][width][.precision][length]specifier
  其中specifier是最重要的一個,它定義引數型別和說明,可能的值為:
  "c"-->字元。
  "d OR i"-->帶符號十進位制整數。
  "e"-->用e表示的科學計數法。
  "E"用E表示的科學計數法,"f"-->十進位制浮點數。
  "g"-->use the shorter of %E or %f。
  "G"-->use the shorter of %E or %f。
  "o"-->八進位制,"s"-->字串。
  "u"-->無符號十進位制整數。
  "x"-->無符號十六進位制整數。
  "X"-->無符號十六進位制整數(使用大寫字母)。
  "p"-->指標地址。
  "n"-->無輸出,該引數必須是一個帶符號整型。
  "%"-->%%表示轉義,將輸出%。
  flags的可能值:
  "-"-->以給定字元寬度對齊。
  "+"-->在結果前面都加上(+或-),預設情況下,只有負數才加上"-"。
  (space)-->如果沒有符號將被列印,則一個空格將被插入到值之前。
  "#"-->與o,x或X一起使用時指定非零值以0,0x或0X開始;與e,E和f一起使用時,將強制輸出一個小數點即使後面沒有數字;與g或G一起使用時與和e,E一樣但是最後的零將不會被去掉。
  "0"-->左邊用0而不是空格填充。
  width的可能值:
    (number)-->最小列印的數字個數,若值的位數不夠則用空格填充,若值超過也不會被截斷。
  "*"-->寬度不指定,但在成為附加整形引數之前引數必須已經被格式化過。
  .precision的可能值:
  .number-->對d,i,o,u,x,X來說,precision指定需要被寫的最少數字個數。如果值比它短,值將在前面用0填充,值過大將不會被截斷,number為0表示當值為0時將沒胡輸出;對e,E和f來說,number指定小數點後位數;對g,G來說,將會是最大有效數字;對s來說,將會是輸出的最大字元數;對c來說這沒有影響。如果沒有precision被指定,預設為1。
  .*-->精度在格式化字串中未指定,附加整型引數之前必須已經被格式化過。
  length的可能值:
  "h"-->引數被轉換為short int或unsigned short int,只適用於i,d,o,u,x和X。
  "l"-->引數被轉換為long int或unsigned long int當與i,d,o,u,x,X一起使用時,寬字元或寬字串當與c,s一起使用時。
  "L"-->引數被轉換為long double當與e,E,f,g,G一起時。
參考例子 :
#include <stdio.h>
int main()
{
    FILE *in,*out;
    if ((in=fopen("AUTOEXEC.BAT","rt"))==NULL)
    {
        fprintf(stderr,"Cannot open input file.");
        return 1;
    }
    if ((out=fopen("AUTOEXEC.BAK","wt"))==NULL)
    {
        fprintf(stderr,"Cannot open output file.");
        return 1;
    }
    while(!feof(in))
        fputc(fgetc(in),out);
    fclose(in);
    fclose(out);
    return 0;
}





fclose     

函式功能 :關閉與流關聯的檔案並取消關聯。與這個流相關聯的所有內部緩衝區將被重新整理;緩衝區中還沒有寫入的內容及沒有讀的內容都將被丟棄。即使函式呼叫失敗,這個流將與檔案失去了關聯。    
函式用法 :fclose(FILE *pFile),返回int值,如果函式執行成功,將返回0,否則返回EOF
參考例子:
#include <string.h>
#include <stdio.h>
int main()
{
    FILE *fp;
    char buf[11]="0123456789";
    fp=fopen("test.txt","w");
    fwrite(&buf,strlen(buf),1,fp);
    fclose(fp);
    return 0;
}




vfprintf 

函式功能 :將格式化的資料寫到指定流中。將使用引數列表中的值來展開的格式字串中的內容寫到指定流中。這個函式的行為與fprintf類似,只是引數列表是通過va_list來傳遞的而不是一連串的引數,這在引數列表在呼叫函式過程中通過它自身傳遞時特別有用。vfprintf不會自動呼叫va_end巨集。
函式用法 :int vfprintf(FILE *pFile, const char* format, va_list arg),format引數的相關資訊請參見fprintf函式。arg是一個代表變數引數列表的物件,它必須已經在標頭檔案cstdarg裡定義的va_start巨集裡初始化過。成功則返回總共寫入的字元數,失敗則返回一個負數。
參考例子 :
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <fcntl.h>
void End_Log(char *fmt,...)
{
va_list arg_list;
FILE *fp;

if(fp=fopen("test.txt","w+"))==NULL
return;
va_start(arg_list,fmt);
vfprintf(fp,fmt,arg_list);
va_end(arg_list);
fclose(fp);
return;
}




vprintf 

函式功能 :將已格式化的變數引數列表列印到stdout。向stdout寫入引數傳遞的內容。與vfprintf類似,只是流為標準輸出流。
函式用法 :int vprintf(const char* format, va_list arg),format的相關內容請參見fprintf函式。成功則返回總共寫入的字元數,失敗則返回一個負數。






vsprintf 

函式功能 :將已格式化的變數引數列表列印到字串。向一個字串寫入引數傳遞的內容,與vfprintf類似,只是輸出物件為一個字串。
函式用法 :int vsprintf(char* str, const char* format, va_list arg),str即為將儲存的物件字串,format的相關內容請參見fprintf函式。成功則返回總共寫入的字元數,失敗則返回一個負數。。




feof 

函式功能 :檢查與檔案相關聯的流的EOF指示器的狀態。
函式用法 :feof(FILE *pFile),返回int值,如果EOF置位,返回非零值,否則返回零值。
參考例子 :
#include <stdio.h>
int main()
{
    FILE *stream;
    stream=fopen("test.txt","r");
    fgetc(stream);
    if (feof(stream))
        printf("We have reached end-of-file");
    fclose(stream);
    return 0;
}





ferror 

函式功能 :檢查與檔案相關聯的流的error指示器的狀態,通常該指示器是因為對已經產生錯誤的流的過早操作。 
函式用法 :ferror(FILE *pFile),返回int值,如果error指示器置位,返回非零值,否則返回零值。
參考例子:
#include <stdio.h>
int main()
{
    FILE *stream;
    stream=fopen("DUMMY.dat","w");
    (void) getc(stream);
    if (ferror(stream))
    {
        printf("Error reading from DUMMY.dat")
        clearerr(stream);
    }
    fclose(stream);
    return 0;
}




clearerr

函式功能 :重置流的error與EOF指示器。當一個使用流的功能因為error或者EOF而失敗時,一個或多個內部指示器會被設定,這些指示器會一直有效直到呼叫clearerr、rewind、fseek或fsetpos為止。比如說當使用fopen開啟一個檔案而只給"r"許可權,當試圖對它進行"w"操作時就會產生錯誤,這時需要使用本函式來重置指示器資訊。   
函式用法 :clearerr(FILE *pFile),返回void。
參考例子 :
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main()
{
    int gdriver=DETECT,gmode,errorcode;
    int midx,midy;
    initgraph(&gdriver,&gmode,);
    errorcode=graphresult();
    if (errorcode!=grOk)
    {
        printf("Graphics error: %s",grapherrormsg(errorcode));
        printf("Press any key to halt:");
        getch();
        exit(1);
    }
    midx=getmaxx()/2;
    midy=getmaxy()/2;
    setcolor(getmaxcolor());
    settextjustify(CENTER_TEXT,CENTER_TEXT);
    outtextxy(midx,midy,"press any key to clear the screen:");
    getch();
    cleardevice();
    outtextxy(midx,midy,"press any key to quit:");
    getch();
    closegraph();
    return 0;
}






fflush 

功能 :重新整理流。如果給定的流開啟是為了寫操作並且上一個I/O操作是輸出,在輸出緩衝區中的任何不成文的資料將被寫到檔案。如果給定的流開啟是為了讀操作並且上一個操作是輸入操作,行為取決於具體的庫實現。在某些實現中這次導致輸入緩衝區被清除,但是這不是標準的行為。如果引數是一個空指標,所有開啟的檔案將被重新整理。流在這個呼叫之後將保持開啟。如果一個檔案因為對fclose的呼叫或者程式終止而關閉,所有與其有關的緩衝區都將被自動重新整理。
用法 :fflush(FILE *pFile),返回int型值,零值表示成功,若發生錯誤將返回EOF且錯誤指示器將被設定。
參考例子:
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>
void flush(FILE *stream);
int main()
{
    FILE *stream;
    char msg[]="This is a test";
    stream=fopen("DUMMY.FIL","w");
    fwrite(msg,strlen(msg),1,stream);
    clrscr();
    printf("Press any key to flush DUMMY.FIL:");
    getch();
    flush(stream);
    printf("File was flushed,Press any key to quit:");
    getch();
   return 0;
}
void flush(FILE *stream)
{
    int duphandle;
    fflush(stream);
    duphandle=dup(fileno(stream));
    close(duphandle);
}






fgetc 

函式功能 :從流中獲取字元。返回指定流的內部檔案位置指示器當前指向的字元。內部檔案位置指示器向前移動一個字元指向下一個字元。
函式用法 :fgetc(FILE *pFile),返回int型值,正常情況下返回該字元的ASCII值,如果出錯或者到達EOF,則返回EOF並且設定error和EOF指示器。
參考例子 :
#include <string.h>
#include <stdio.h>
#include <conio.h>
int main()
{
    FILE *stream;
    char string[]="This is a test";
    char ch;
    stream=fopen("test.txt","w+");
    fwrite(string,strlen(string),1,stream);
    fseek(stream,0,SEEK_SET);
    do
    {
        ch=fgetc(stream);
        putch(ch);
    }
    while (ch!=EOF);
    fclose(stream);
    return 0;
}



fgetpos 

  功能 :獲取在流中的當前位置。獲取唯一指定的流中位置指示器並且將其儲存到指向位置的fpos_t型別變數。
  用法 :fgetpos(FILE *pFile, fpos_t *pos),正常時返回零值,出錯時返回非零int值。

fgets 

函式功能 :從流中讀取多個字元並且將它們以C風格字串儲存到char*型別引數直到指定字元-1個字元已經讀取或者一個換行或者到達EOF為止。換行符會讓fgets停止讀取,但是它會被當作有效字元它會被包含到目標字串裡面去。C風格字串預設會將一個空字元新增到獲取的字串後面。
函式用法 :fgets(char *str, int num, FILE *pFile),str將儲存目標字串,num指示讀取字元數+1。返回值為char*型別。如果正常讀取,將返回str,如果沒有字元被讀取並且到達EOF,str的值將不變且返回空指標。如果有錯誤發生,會返回空指標。
參考例子 :
#include <string.h>
#include <stdio.h>
int main()
{
    FILE *stream;
    char string[]="This is a test";
    char msg[20];
    stream=fopen("test.txt","w+");
    fwrite(string,strlen(string),1,stream);
    fseek(stream,0,SEEK_SET);
    fgets(msg,strlen(string)+1,stream);
    printf("%s",msg);
    fclose(stream);
    return 0;
}




fputc 

函式功能 :寫一個字元到指定流,並且位置指示器前進一個。字元將被寫到流的內部位置指示器指示的當前位置,指示器隨後前進一個字元。
函式用法 :fputc(int ch, FILE *pFile),成功則返回該字元,否則返回EOF並設定error指示器。
參考例子 :
#include <stdio.h>
int main()
{
    char msg[]="Hello world";
    int i=0;
    while (msg[i])
    {
        fputc(msg[i],stdout);
        i++;
    }
    return 0;
}




fputs 

函式功能 :寫一個字串到指定流。C風格字串最後的'\0'將不會被寫到流。
函式用法 :fputs(const char *str, FILE *pFile),返回值為int型,若出錯則返回EOF,否則返回無效字元。
參考例子 :
#include <stdio.h>
int main()
{
    fputs("Hello world",stdout);
    return 0;
}




fread 

函式功能 :從流中讀取資料塊。讀取指定個數元素的一組資料,其中每個元素有指定位元組數,從流中讀取並存放在指定記憶體塊。
函式用法 :size_t fread(void *ptr, size_t size, size_t count, FILE *pFile),ptr指向一個至少有size*count大小的記憶體塊,size指示每一個元素的大小,count指示讀取元素個數。函式將返回讀取的元素總數,如果它與count不符,那麼可能是發生了錯誤或者是到達了EOF。
參考例子 :
#include <string.h>
#include <stdio.h>
int main()
{
    FILE *stream;
    char msg[]="this is a test";
    char buf[20];
    if ((stream=fopen("test.txt","w+"))==NULL)
    {
        fprintf(stderr,"Cannot open output file.");
        return 1;
    }
    fwrite(msg,strlen(msg)+1,1,stream);
    fseek(stream,SEEK_SET,0);
    fread(buf,strlen(msg)+1,1,stream);
    printf("%s",buf);
    fclose(stream);
    return 0;
}




freopen 

函式功能 :函式將嘗試關閉與第三個引數所代表的流所關聯的檔案並取消關聯,然後不管流此時的狀態是否為關閉,將開啟流並開啟指定檔案且與其相關聯。此函式在將指定檔案關聯到stdin,stdout,stderr等流時格式有用。
函式用法 :FILE* freopen(const char* filename, const char* mode, FILE* stream),mode相關資訊詳見fopen函式說明。成功則返回確定流的物件,否則返回空指標。
#include <stdio.h>
int main()
{
    if (freopen("OUTPUT.FIL","w",stdout)==NULL)
        fprintf(stderr,"error redirecting stdout");
    printf("This will go into a file.");
    fclose(stdout);
    return 0;
}




fscanf 

函式功能 :從流中讀取格式化資料。從流中讀取資料並存儲在附加引數指向的位置。附加引數必須指向在格式引數中指定型別的已經分配的物件。
函式用法 :int fscanf(FILE *pFile, const char* format, ...),format中可能包含以下元素:
  1.空白字元。函式會讀取並忽略所有空白字元包括空格、換行和製表符直到讀到下一個非空字元。可以包含任意數目的空白字元。
  2.除%外的任意非空字元。任意一個不是空白字元且不是以%開頭的字元將導致函式從流中讀取下一個字元將其與它比較,如果匹配則函式將進行下一個字元的讀取與比較。如果不匹配,函式失敗並返回,結束讀取。
  3.格式指定符。由以%開始的序列形成一個格式說明符,用於指定從流中提取到的資料的型別和格式並將其儲存在附加引數中指出的位置。格式說明符的原型如下:
  [=%[*][width][modifiers]type=]
  其中:
  *-->一個可選的起始符號,指示將從流中讀取的資料被忽略。
  width-->在當前讀操作中讀取的最大字元數。
  modifiers-->指定不同於int(在d,i,n情況下),unsigned int(在o,u,x情況下),float(在e,f,g情況下)的附加引數指定的資料的大小。"h"-->short int(在d,i,n),或unsigned short int(在o,u,x)。"l"-->long int(在d,i,n),或unsigned long int(在o,u,x)或double(在e,f,g)。"L"-->long double(在e,f,g)。
  type-->一個指定要讀取資料的型別與期望的讀取方式,它可能的值如下:
    c-->單個字元。
    d-->十進位制整數。可選正負號。
    e,E,f,g,G-->浮點數。可選正負號,可以使用科學計數法。
    o-->八進位制整數。
    s-->字串。讀取字串直到空白字元出現。
    u-->無符號十進位制整數。
    x,X-->十六進位制整數。
  附加引數期望是引用(指標)型別,如果你想將fscanf讀取來的資料儲存到一個一般變數,則需要加&符號。如:fscanf(pFile, "%d", &n);
  函式時返回成功讀取的元素個數。這個計數比期望的讀取數少或者相等,在匹配失敗的情況下甚至是0。在沒有資料被成功讀取時失敗則返回EOF。
參考例子 :
#include <stdlib.h>
#include <stdio.h>
int main()
{
    int i;
    printf("Input an integer: ");
    if (fscanf(stdin,"%d",&i))
        printf("The integer read was: %i",i);
    else
    {
        fprintf(stderr,"Error reading an integer from stdin.");
        exit(1);
    }
    return 0;
}






fseek 

函式功能 :重新定位流的位置指示器。將與流關聯的位置指示器設定到一個新的由第三個引數指定的引用位置加上第二個引數指定的偏移量而定義的新的位置。在呼叫了此函式之後EOF指示器將被清除,ungetc函式所產生的所有影響將被丟棄。當在文字檔案使用fseek和ftell時,記住在一些平臺上對文字檔案進行格式轉換時將導致意想不到的重定位。在開放的可以讀寫的流上,對fseek的呼叫可以對讀和寫之間進行切換。
函式用法 :int fseek(FILE *pFile, long int offset, int origin),offset指示相對origin的偏移量,origin可能的取值為:SEEK_SET,檔案起始;SEEK_CUR,檔案指標當前位置;SEEK_END,檔案尾。成功返回零值,否則返回非零值。
參考例子 :
#include <stdio.h>
long filesize(FILE *stream);
int main()
{
    FILE *stream;
    stream=fopen("MYFILE.TXT","w+");
    fprintf(stream,"This is a test");
    printf("Filesize of MYFILE.TXT is %ld bytes",filesize(stream));
    fclose(stream);
    return 0;
}
long filesize(FILE *stream)
{
    long curpos,length;
    curpos=ftell(stream);
    fseek(stream,0L,SEEK_END);
    length=ftell(stream);
    fseek(stream,curpos,SEEK_SET);
    return length;
}




fsetpos 

  功能 :定位流位置指示器。將流位置指示器定位到一個由值由fgetpos函式獲取的fpos_t指標指向的位置的新的位置。產生的其它影響與fseek相同。
  用法 :int fsetpos(FILE *pFile, const fpos_t *pos)。成功則返回零值,否則返回非零值且將全域性errno變數設定為某確定值。

ftell 

函式功能 :獲取位置指示器在流中的當前位置。對二進位制流,返回值等於從檔案起始位置的偏移位元組數;對文字流,返回的值不能確保一定是從檔案起始位置的偏移位元組數,但返回值仍可用於重定位流位置指示器到此位置。
函式用法 :long int ftell(FILE *pFile),成功則返回當前位置指示器的值,如果出錯,返回-1L,設定全域性errno變數。
參考例子 :
#include <stdio.h>
int main()
{
    FILE *stream;
    stream=fopen("MYFILE.TXT","w+");
    fprintf(stream,"This is a test");
    printf("The file pointer is at byte %ld",ftell(stream));
    fclose(stream);
    return 0;
}





fwrite 

函式功能 :向流中寫資料塊。其引數解釋等與fread相對應。
函式用法 :size_t fwrite(const void *ptr, size_t size, size_t count, FILE *pFile),成功寫入的元素數將被返回,如果這個數與count不符,則表明出現了錯誤。
參考例子 :
#include <stdio.h>
struct mystruct{
    int i;
    char ch;
};
int main()
{
    FILE *stream;
    struct mystruct s;
    if ((stream=fopen("TEST.dat","wb"))==NULL)
    {
        fprintf(stderr,"Cannot open output file.");
        return 1;
    }
    s.i=0;
    s.ch='A';
    fwrite(&s,sizeof(s),1,stream);
    fclose(stream);
    return 0;
}




getc 

函式功能 :返回指定流的內部檔案位置指示器當前所指向的字元,指示器指向下一個字元。它與fgetc功能一樣但是可能用巨集實現,所以傳過來的引數不能是可能導致其它含義的表示式。
函式用法 :int getc(FILE *pFile)。讀取的字元將被作為int值返回,如果EOF或者讀取錯誤,則返回EOF並且設定error與EOF指示器。








getchar 

函式功能 :從標準輸入獲取一個字元。
函式用法 :int getchar(),返回獲取的字元,若EOF或發生錯誤,將返回EOF且設定error或EOF指示器。
參考例子 :
#include <stdio.h>
int main()
{
int c;
while((c = getchar()) != EOF)
{
....
}
return 0;
}


gets 

  功能 :從標準輸入獲取一個字串。從標準輸入讀取一個字串直到換行符為止並存儲到傳入的引數,換行符不包括在裡面。一個'\0'將自動被新增到字串的最後。gets沒有提供限制讀取字數限制,所以你需要自己留意輸入的字元數沒有超過傳入引數所提供的空間。
  用法 :char* gets(char* str),成功則返回str,如果EOF或沒讀取到字元則str不變且返回空指標。發生錯誤也返回空指標。

perror 

  功能 :列印錯誤資訊。解讀全域性變數errno的值為一個字串並且將其列印到stderr(標準錯誤輸出流,通常是螢幕),可選以傳入字串開頭。errno是一個全域性的描述最近一個錯誤的變數。
  用法 :void perror(const char* str),如perror("my deferr"),則可能的輸出為my deferr: no such files.。

putc 

  功能 :向流中寫一個字元。流位置指示器將前進一個字元。putc與fputc功能類似但它可能為巨集實現,引數要求不能為可能引起歧義的表示式。
  用法 :int putc(int ch, FILE *pFile),無錯則返回ch,否則返回EOF且設定error指示器。

putchar 

  功能 :向標準輸出流寫一個字元。
  用法 :int putchar(int ch),返回ch,若出錯則返回EOF且設定error指示器。

puts 

  功能 :向標準輸出流輸出一個字串。向stdout寫入一個字串並且最後新增一個換行符。字串最末的'\0'將被忽略。fputs(str, stdout)起同樣的效果但最後沒有換行符。
  用法 :int puts(const char* str),返回一個非負數,出錯返回EOF。

remove 

  功能 :刪除引數中指定名字的檔案。這是一個直接對檔案進行的操作。
  用法 :int remove(const char* filename),如果刪除成功則返回零值,否則返回非零值並且errno會被設定為相應值。呼叫perror函式可以向標準流列印錯誤資訊。

rename 

  功能 :重新命名檔案或資料夾。如果舊名字與新的名字在不同的路徑,如果作業系統支援檔案將被移動到新的位置。
  用法 :int rename(const char* oldname, const char* new name),如果檔案被成功重新命名,則返回零值;否則返回非零值且設定errno為對應值。errno是一個對應錯誤型別的數值。呼叫perror函式可以向標準流列印錯誤資訊。

rewind 

  功能 :定位位置指示器到開始。將與流關聯的位置指示器定位到檔案的開頭,對rewind的呼叫與fseek(pFile, OL, SEEK_SET)等價,除了一點,就是rewind會清除error指示器。
  用法 :rewind(FILE *rewind),無返回值。

setbuf 

  功能 :設定流緩衝區。設定一個緩衝區用於指定全緩衝流的I/O操作,或者如果為緩衝區指定引數是NULL,將禁用流緩衝以致流成為一個無緩衝流。函式必須在檔案與開啟的流已經關聯但是任何輸入輸出操作都還沒有進行。緩衝區指定引數必須是一個指向至少BUFSIZ大小的陣列。對於全緩衝流,寫操作將不會被馬上執行到裝置,資料將在緩衝區中累積直到緩衝區充滿之後被作為一個塊寫入到裝置。當重新整理流時這個寫操作會被強制執行,也就是當fflush或者fclose函式被呼叫時。當程式終止時所有緩衝也會被重新整理。對於無緩衝流,資料在每個寫操作之後會盡可能快的被寫到物理裝置。所有檔案在開啟時都會有一個預設分配流。這個函式可以用於定義一個使用者分配緩衝區或者將一個指定流的緩衝禁用。系統標準流比如stdout和stderr都是無緩衝的除非它們被重定向。如果要更改為行緩衝流,使用setvbuf。
  用法 :void setbuf(FILE *pFile, char *buffer),buffer的定義大小至少為char buffer[BUFSIZ]。

setvbuf 

  功能 :與setbuf功能類似,所不同的是這個函式允許指定緩衝的模式與大小。緩衝的大小(bytes)是由一個引數來指定。如果緩衝未被指定如緩衝引數為NULL,那麼系統會動態分配函式要求的記憶體量作為流的緩衝。模式引數被用於指定緩衝將會是全緩衝、行緩衝還是無緩衝。全緩衝的情況與setbuf一樣。而當為行緩衝時在每當換行符寫入時緩衝將被寫到物理裝置。
  用法 :int setvbuf(FILE *pFile, char *buffer, int mode, size_t size),操作成功則返回零值;否則返回非零值,比如一個無效的模式或大小或buffer為NULL系統自動分配記憶體時發生錯誤。引數說明:mode指定檔案緩衝模式,取值可以為_IOFBF-->全緩衝,_IOLBF-->行緩衝,_IONBF-->無緩衝。size指定緩衝大小。如果buffer為NULL,那自動分配最小應分配記憶體;否則必須指定一個不大於buffer的bytes數。

tmpfile 

  功能 :開啟一個臨時檔案。建立一個臨時二進位制檔案,開放更新(wb+模式,參考fopen函式)。檔名當然要與任何此目錄下已存在的不同,檔案預設儲存在使用者的根目錄下,即“桌面”的上一級目錄。所建立的這個臨時檔案會在流關閉或者程式正常終止的時候自動關閉。
  用法 :FILE* tmpfile(),如果成功函式返回一個指向所建立的臨時檔案的流指標。如果檔案不能被建立,會返回NULL。

tmpnam 

  功能 :生成臨時檔名。一個包含檔名且與任何已存在檔案不相同的字串被生成。這個字串可以被用於建立一個臨時檔案而不必覆蓋任何已存在檔案。如果引數為空指標,那麼結果字串會儲存在一個可以通過返回值訪問的內部靜態陣列。這個串的內容會一直存在直到對此函式的下一次呼叫清除它。如果引數不為空指標,它必須指向一個至少有L_tmpnam位元組的陣列,它將被所提議的臨時檔名所填充。L_tmpnam是<cstdio>中定義的一個巨集。這個函式返回的檔名可以被用於建立一個正常的檔案能被fopen作為一個臨時檔案來使用。這個檔案通過這種方式來建立,與那些通過tmpfile函式建立的檔案不一樣,在流關閉時不會自動關閉,在不使用它以後,你必須先關閉然後呼叫remove來刪除它。
  用法 :char* tmpnam(char* str),str即指定檔名。返回一個包含目標檔名的C風格字串指標。如果str是空指標,返回的指標會指向一個將會在下一次呼叫些函式時被覆蓋的內部緩衝區。如果str不是空指標,那麼返回str。如果函式沒能建立一個合適的檔名,那麼將返回一個空指標。

ungetc 

  功能 :將一個字元退回輸入流中。一個字元會被新增到流中上一個讀取字元的位置,內部檔案位置指示器將退回到這個位置。這個字元可以與上一個被讀取的字元相同也可以不同。這隻會影響下一個對此字元進行讀取的結果,而不會影響到物理檔案的內容。檔案內容將不會被此函式所影響。如果設定了EOF內部指示器,那麼在呼叫此函式之後它將被清除。對此流的fseek,fsetpos,rewind都會將之前退回的字元都丟棄。如果傳遞的引數為EOF,那麼操作失敗,流不變。
  用法 :int ungetc(int ch, FILE *pFile),ch表達將會退回的字元,它會被當作int值傳遞。pFile是一個標識一個輸入流的FILE物件指標。




fileno

函式功能:  得到與fp等價的檔案控制代碼號
函式用法:int fileno(FILE *fp) ,fp-->由fopen()函式開啟的檔案指標   
參考例子:
#include <stdio.h>


int main()
{
    FILE *stream;
    stream=fopen("file","r");
    printf("File number is %d\n",fileno(stream));
    fclose(stream);
    return 0;
}    




fgetchar



函式功能 : 等價於fgetc(stdin),也等價於getchar,但僅作為函式實現     
函式用法 : int fgetchar(void) , fp-檔案指標,返回讀出的字元,如檔案已到結尾,返回值為EOF
參考例子 : 
#include <stdio.h>
int main()
{
       FILE *fp;
       int c;
       fp = freopen( "file", "r", stdin );
       while( (c = getchar()) != EOF )
         putchar(c);
       fclose( fp );
    return 0;
}   




fputchar



函式功能 : 在標準輸出流(即螢幕上)的當前位置寫入一個字元
函式用法 : int fputchar(int ch),ch-要寫入的字元(捨去高位位元組),   操作正確時返回寫入的字元,錯誤返回EOF
參考例子 :


#include <stdio.h>
int main()
{
    char msg[] ="This is a test";
    int i=0;
    while (msg[i])
    {
        fputchar(msg[i]);
        i++;
    }
    return 0;
}