【轉載】標準C語言的輸入輸出流(i/o)方法詳解

標準 C I/O


clearerr

語法:html

  #include <stdio.h>
  void clearerr( FILE *stream );

clearerr函數重置錯誤標記和給出的流的EOF指針. 當發生錯誤時,你可使用perror()判斷實際上發生了何種錯誤.數組

相關主題: feof()ferror(), 和perror().緩存


fclose

語法:函數

  #include <stdio.h>
  int fclose( FILE *stream );

函數fclose()關閉給出的文件流, 釋放已關聯到流的全部緩衝區. fclose()執行成功時返回0,不然返回EOF.post

相關主題: fopen()freopen(), 和fflush().翻譯


feof

語法:指針

  #include <stdio.h>
  int feof( FILE *stream );

函數feof()在到達給出的文件流的文件尾時返回一個非零值.調試

相關主題: clearerr()ferror()perror()putc()和 getc().code


ferror

語法:orm

  #include <stdio.h>
  int ferror( FILE *stream );

ferror()函數檢查stream(流)中的錯誤, 若是沒發生錯誤返回0,不然返回非零. 若是發生錯誤, 使用perror()檢測發生什麼錯誤.

相關主題: clearerr()feof()perror(),


fflush

語法:

  #include <stdio.h>
  int fflush( FILE *stream );

若是給出的文件流是一個輸出流,那麼fflush()把輸出到緩衝區的內容寫入文件. 若是給出的文件流是輸入類型的,那麼fflush()會清除輸入緩衝區. fflush()在調試時很實用,特別是對於在程序中輸出到屏幕前發生錯誤片斷時. 直接調用 fflush( STDOUT )輸出能夠保證你的調試輸出能夠在正確的時間輸出.

    printf( "Before first call\n" );
    fflush( STDOUT );
    shady_function();
    printf( "Before second call\n" );
    fflush( STDOUT );
    dangerous_dereference();

相關主題: fclose()fopen()fread()fwrite()getc(), 和putc().


fgetc

語法:

  #include <stdio.h>
  int fgetc( FILE *stream );

fgetc()函數返回來自stream(流)中的下一個字符,若是到達文件尾或者發生錯誤時返回EOF.

相關主題: fputc()getc()putc(), 和fopen().


fgetpos

語法:

  #include <stdio.h>
  int fgetpos( FILE *stream, fpos_t *position );

fgetpos()函數保存給出的文件流(stream)的位置指針到給出的位置變量(position)中. position變量是fpos_t類型的(它在stdio.h中定義)而且是能夠控制在FILE中每一個可能的位置對象. fgetpos()執行成功時返回0,失敗時返回一個非零值.

相關主題: fsetpos()fseek()和 ftell().


fgets

語法:

  #include <stdio.h>
  char *fgets( char *str, int num, FILE *stream );

函數fgets()從給出的文件流中讀取[num - 1]個字符而且把它們轉儲到str(字符串)中. fgets()在到達行末時中止,在這種狀況下,str(字符串)將會被一個新行符結束. 若是fgets()達到[num - 1]個字符或者遇到EOF, str(字符串)將會以null結束.fgets()成功時返回str(字符串),失敗時返回NULL.


fopen

語法:

  #include <stdio.h>
  FILE *fopen( const char *fname, const char *mode );

fopen()函數打開由fname(文件名)指定的文件, 並返回一個關聯該文件的流.若是發生錯誤, fopen()返回NULL. mode(方式)是用於決定文件的用途(例如 用於輸入,輸出,等等)

Mode(方式) 意義
"r" 打開一個用於讀取的文本文件
"w" 建立一個用於寫入的文本文件
"a" 附加到一個文本文件
"rb" 打開一個用於讀取的二進制文件
"wb" 建立一個用於寫入的二進制文件
"ab" 附加到一個二進制文件
"r+" 打開一個用於讀/寫的文本文件
"w+" 建立一個用於讀/寫的文本文件
"a+" 打開一個用於讀/寫的文本文件
"rb+" 打開一個用於讀/寫的二進制文件
"wb+" 建立一個用於讀/寫的二進制文件
"ab+" 打開一個用於讀/寫的二進制文件

示例:

    char ch;
    FILE *input = fopen( "stuff", "r" );
    ch = getc( input );
    

fprintf

語法:

  #include <stdio.h>
  int fprintf( FILE *stream, const char *format, ... );

fprintf()函數根據指定的format(格式)(格式)發送信息(參數)到由stream(流)指定的文件. fprintf()只能和printf()同樣工做. fprintf()的返回值是輸出的字符數,發生錯誤時返回一個負值.

示例:

    char name[20] = "Mary";
    FILE *out;
    out = fopen( "output.txt", "w" );
    if( out != NULL )
      fprintf( out, "Hello %s\n", name );

相關主題: printf() 和fscanf().


fputc

語法:

  #include <stdio.h>
  int fputc( int ch, FILE *stream );

函數fputc()把給出的字符ch寫到給出的輸出流. 返回值是字符, 發生錯誤時返回值是EOF.

相關主題: fgetc()fopen()fprintf()fread(), 和fwrite().


fputs

語法:

  #include <stdio.h>
  int fputs( const char *str, FILE *stream );

fputs()函數把str(字符串)指向的字符寫到給出的輸出流. 成功時返回非負值, 失敗時返回EOF.

相關主題: fgets()gets()puts()fprintf(), 和fscanf().


fread

語法:

  #include <stdio.h>
  int fread( void *buffer, size_t size, size_t num, FILE *stream );

函數fread()讀取[num]個對象(每一個對象大小爲size(大小)指定的字節數),並把它們替換到由buffer(緩衝區)指定的數組. 數據來自給出的輸入流. 函數的返回值是讀取的內容數量...

使用feof()ferror()判斷到底發生哪一個錯誤.

相關主題: fwrite()fopen(),fscanf()fgetc()getc().


freopen

語法:

  #include <stdio.h>
  FILE *freopen( const char *fname, const char *mode, FILE *stream );

freopen()函數經常使用於再分配一個以存在的流給一個不一樣的文件和方式(mode).在調用本函數後,給出的文件流將會用mode(方式)指定的訪問模式引用fname(文件名). freopen()的返回值是新的文件流,發生錯誤時返回NULL.

相關主題: fopen() 和fclose().


fscanf

語法:

  #include <stdio.h>
  int fscanf( FILE *stream, const char *format, ... );

函數fscanf()以scanf()的執行方式從給出的文件流中讀取數據. fscanf()的返回值是事實上已賦值的變量的數,若是未進行任何分配時返回EOF.

相關主題: scanf() 和fprintf().


fseek

語法:

  #include <stdio.h>
  int fseek( FILE *stream, long offset, int origin );

函數fseek()爲給出的流設置位置數據. origin的值應該是下列值其中之一(在stdio.h中定義):

名稱 說明
SEEK_SET 從文件的開始處開始搜索
SEEK_CUR 從當前位置開始搜索
SEEK_END 從文件的結束處開始搜索

fseek()成功時返回0,失敗時返回非零. 你可使用fseek()移動超過一個文件,可是不能在開始處以前. 使用fseek()清除關聯到流的EOF標記.

相關主題: ftell()rewind()fopen()fgetpos()和 fsetpos().


fsetpos

語法:

  #include <stdio.h>
  int fsetpos( FILE *stream, const fpos_t *position );

fsetpos()函數把給出的流的位置指針移到由position對象指定的位置. fpos_t是在stdio.h中定義的. fsetpos()執行成功返回0,失敗時返回非零.

相關主題: fgetpos()fseek()和 ftell().


ftell

語法:

  #include <stdio.h>
  long ftell( FILE *stream );

ftell()函數返回stream(流)當前的文件位置,若是發生錯誤返回-1.

相關主題: fseek()和 fgetpos().


fwrite

語法:

  #include <stdio.h>
  int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

fwrite()函數從數組buffer(緩衝區)中, 寫count個大小爲size(大小)的對象到stream(流)指定的流. 返回值是已寫的對象的數量.

相關主題: fread()fscanf()getc()和 fgetc().


getc

語法:

  #include <stdio.h>
  int getc( FILE *stream );

getc()函數從stream(流)獲取並返回下一個字符,若是到達文件尾返回EOF. getc()和fgetc()是同樣的. 例如:

    char ch;
    FILE *input = fopen( "stuff", "r" );
    
    ch = getc( input );
    while( ch != EOF ) {
      printf( "%c", ch );
      ch = getc( input );
    }

相關主題: fputc()fgetc()putc()和 fopen().


getchar

語法:

  #include <stdio.h>
  int getchar( void );

getchar()函數從STDIN(標準輸入)獲取並返回下一個字符,若是到達文件尾返回EOF.

相關主題: fputc()fgetc()putc()和 fopen().


gets

語法:

  #include <stdio.h>
  char *gets( char *str );

gets()函數從STDIN(標準輸入)讀取字符並把它們加載到str(字符串)裏,直到遇到新行(\n)或到達EOF. 新行字符翻譯爲一個null中斷符. gets()的返回值是讀入的字符串,若是錯誤返回NULL.

相關主題: fputs()fgetc(),fgets()和 puts().


perror

語法:

  #include <stdio.h>
  void perror( const char *str );

perror()函數打印str(字符串)和一個相應的執行定義的錯誤消息到全局變量errno中.


printf

語法:

  #include <stdio.h>
  int printf( const char *format, ... );

printf()函數根據format(格式)給出的格式打印輸出到STDOUT(標準輸出)和其它參數中.

字符串format(格式)由兩類項目組成 - 顯示到屏幕上的字符和定義printf()顯示的其它參數. 基本上, 你能夠指定一個包含文本在內的format(格式)字符串,也能夠是映射到printf()其它參數的"特殊"字符. 例如本代碼

    char name[20] = "Bob";
    int age = 21;
    printf( "Hello %s, you are %d years old\n", name, age );

顯示下列輸出:

    Hello Bob, you are 21 years old

%s 表示, "在這裏插入首個參數,一個字符串." %d 表示第二個參數(一個整數)應該放置在那裏. 不一樣的"%-codes"表示不一樣的變量類型, 也能夠限制變量的長度.

Code 格式
%c 字符
%d 帶符號整數
%i 帶符號整數
%e 科學計數法, 使用小寫"e"
%E 科學計數法, 使用大寫"E"
%f 浮點數
%g 使用%e或%f中較短的一個
%G 使用%E或%f中較短的一個
%o 八進制
%s 一串字符
%u 無符號整數
%x 無符號十六進制數, 用小寫字母
%X 無符號十六進制數, 用大寫字母
%p 一個指針
%n 參數應該是一個指向一個整數的指針 指向的是字符數放置的位置
%% 一個'%'符號

一個位於一個%和格式化命令間的整數擔當着一個最小字段寬度說明符,而且加上足夠多的空格或0使輸出足夠長. 若是你想填充0,在最小字段寬度說明符前放置0. 你可使用一個精度修飾符,它能夠根據使用的格式代碼而有不一樣的含義.

  • 用%e, %E和 %f,精度修飾符讓你指定想要的小數位數. 例如,

     

        %12.6f
    

    將會至少顯示12位數字,並帶有6位小數的浮點數.

  • 用%g和 %G, 精度修飾符決定顯示的有效數的位數最大值.
  • 用%s,精度修飾符簡單的表示一個最大的最大長度, 以補充句點前的最小字段長度.

全部的printf()的輸出都是右對齊的,除非你在%符號後放置了負號. 例如,

 

    %-12.4f

將會顯示12位字符,4位小數位的浮點數而且左對齊. 你能夠修改帶字母lh%d, %i, %o, %u和 %x 等類型說明符指定長型和短型數據類型 (例如 %hd 表示一個短整數). %e, %f和 %g 類型說明符,能夠在它們前面放置l指出跟隨的是一個double. %g, %f和 %e 類型說明符能夠置於字符'#'前保證出現小數點, 即便沒有小數位. 帶%x類型說明符的'#'字符的使用, 表示顯示十六進制數時應該帶'0x'前綴. 帶%o類型說明符的'#'字符的使用, 表示顯示八進制數時應該帶一個'0'前綴.

你能夠在輸出字符串中包含 連續的Escape序列.

printf()的返回值是打印的字符數,若是發生錯誤則返回一個負值.

相關主題: scanf()和 fprintf().


putc

語法:

  #include <stdio.h>
  int putc( int ch, FILE *stream );

putc()函數把字符ch寫到stream(流)中. 返回值是寫入的字符, 發生錯誤時返回EOF. 例如:

    char ch;
    FILE *input;
    input = fopen( "temp.cpp", "r" );
    ch = getc( input );
    while( ch != EOF ) {
      printf( "%c", ch );
      ch = getc( input );
    }

顯示"temp.cpp"的內容到屏幕.

相關主題: fgetc()fputc()getchar()和 putchar().


putchar

語法:

  #include <stdio.h>
  int putchar( int ch );

putchar()函數把ch寫到STDOUT(標準輸出). 代碼

    putchar( ch );

    putc( ch, STDOUT );

同樣.

putchar()的返回值是被寫的字符, 發生錯誤時返回EOF.

相關主題: putc()


puts

語法:

  #include <stdio.h>
  int puts( char *str );

函數puts()把str(字符串)寫到STDOUT(標準輸出)上. puts() 成功時返回非負值, 失敗時返回EOF.

相關主題: putc()gets()和 printf().


remove

語法:

  #include <stdio.h>
  int remove( const char *fname );

remove()函數刪除由fname(文件名)指定的文件. remove()成功時返回0,若是發生錯誤返回非零.

相關主題: rename()


rename

語法:

  #include <stdio.h>
  int rename( const char *oldfname, const char *newfname );

函數rename()更改文件oldfname的名稱爲newfname. rename()成功時返回0,錯誤時返回非零.

相關主題: remove()


rewind

語法:

  #include <stdio.h>
  void rewind( FILE *stream );

函數rewind()把文件指針移到由stream(流)指定的開始處, 同時清除和流相關的錯誤和EOF標記.

相關主題: fseek()


scanf

語法:

  #include <stdio.h>
  int scanf( const char *format, ... );

scanf()函數根據由format(格式)指定的格式從stdin(標準輸入)讀取,並保存數據到其它參數. 它和printf()有點相似. format(格式)字符串由控制字符,空白字符和非空白字符組成. 控制字符以一個%符號開始,以下:

控制字符 說明
%c 一個單一的字符
%d 一個十進制整數
%i 一個整數
%e, %f, %g 一個浮點數
%o 一個八進制數
%s 一個字符串
%x 一個十六進制數
%p 一個指針
%n 一個等於讀取字符數量的整數
%u 一個無符號整數
%[] 一個字符集
%% 一個精度符號

scanf()讀取匹配format(格式)字符串的輸入. 當讀取到一個控制字符, 它把值放置到下一個變量. 空白(tabs, 空格等等)會跳過. 非空白字符和輸入匹配, 而後丟棄. 若是是一個在%符號和控制符間的數量, 那麼只有指定數量的字符轉換到變量中. 若是scanf()遇到一個字符集(用%[]控制字符表示), 那麼在括號中的任意字符都會讀取到變量中. scanf()的返回值是成功賦值的變量數量, 發生錯誤時返回EOF.

相關主題: printf()和 fscanf().


setbuf

語法:

  #include <stdio.h>
  void setbuf( FILE *stream, char *buffer );

setbuf()函數設置stream(流)使用buffer(緩衝區),若是buffer(緩衝區)是null,關閉緩衝. 若是使用非標準緩衝尺寸, 它應該由BUFSIZ字符決定長度.

相關主題: fopen()fclose()setvbuf(),


setvbuf

語法:

  #include <stdio.h>
  int setvbuf( FILE *stream, char *buffer, int mode, size_t size );

函數setvbuf()設置用於stream(流)的緩衝區到buffer(緩衝區),其大小爲size(大小). mode(方式)能夠是:

  • _IOFBF, 表示徹底緩衝
  • _IOLBF, 表示線緩衝
  • _IONBF, 表示無緩存

 

相關主題: setbuf(),


sprintf

語法:

  #include <stdio.h>
  int sprintf( char *buffer, const char *format, ... );

sprintf()函數和printf()相似, 只是把輸出發送到buffer(緩衝區)中.返回值是寫入的字符數量. 例如:

    char string[50];
    int file_number = 0;
    
    sprintf( string, "file.%d", file_number );
    file_number++;
    output_file = fopen( string, "w" );

相關主題: printf()fsprintf(),


sscanf

語法:

  #include <stdio.h>
  int sscanf( const char *buffer, const char *format, ... );

函數sscanf()和scanf()相似, 只是輸入從buffer(緩衝區)中讀取.

相關主題: scanf()fscanf(),


tmpfile

語法:

  #include <stdio.h>
  FILE *tmpfile( void );

函數tempfile()用一個獨特的文件名打開一個臨時文件,並返回一個到該文件的指針.若是發生錯誤則返回null.

相關主題: tmpnam(),


tmpnam

語法:

  #include <stdio.h>
  char *tmpnam( char *name );

tmpnam()函數建立一個獨特的文件名並保存在name中. tmpnam()最多能夠調用TMP_MAX指定的次數.

相關主題: tmpfile(),


ungetc

語法:

  #include <stdio.h>
  int ungetc( int ch, FILE *stream );

函數ungetc()把字符ch放回到stream(流)中.

相關主題: getc(),


vprintf, vfprintf和 vsprintf

語法:

  #include <stdarg.h>
  #include <stdio.h>
  int vprintf( char *format, va_list arg_ptr );
  int vfprintf( FILE *stream, const char *format, va_list arg_ptr );
  int vsprintf( char *buffer, char *format, va_list arg_ptr );

這些函數和printf()很是類似, fprintf()和 sprintf()的不一樣在於參數列表是一個指向一系列參數的指針. va_list在STDARG.H中定義,而且也能夠被va_arg()使用. 例如:

    void error( char *fmt, ... ) {
      va_list args;
      
      va_start( args, fmt );
      fprintf( stderr, "Error: " );
      vfprintf( stderr, fmt, args );
      fprintf( stderr, "\n" );
      va_end( args );
      exit( 1 );
    }
轉載請註明文章來自:程序猴( http://www.chengxuhou.com/)
相關文章
相關標籤/搜索