程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C標准庫參考指南(12)stdio.h(A)

C標准庫參考指南(12)stdio.h(A)

編輯:關於C語言

12. stdio.h

標准輸入輸出頭文件提供用於輸入和輸出的函數。

宏:

NULL

_IOFBF

_IOLBF

_IONBF

BUFSIZ

EOF

FOPEN_MAX

FILENAME_MAX

L_tmpnam

SEEK_CUR

SEEK_END

SEEK_SET

TMP_MAX

stderr

stdin

stdout

函數:

clearerr();

fclose();

feof();

ferror();

fflush();

fgetpos();

fopen();

fread();

freopen();

fseek();

fsetpos();

ftell();

fwrite();

remove();

rename();

rewind();

setbuf();

setvbuf();

tmpfile();

tmpnam();

fprintf();

fscanf();

printf();

scanf();

sprintf();

sscanf();

vfprintf();

vprintf();

vsprintf();

fgetc();

fgets();

fputc();

fputs();

getc();

getchar();

gets();

putc();

putchar();

puts();

ungetc();

perror();

變量:

typedef size_t

typedef FILE

typedef fpos_t

12.1. 變量和定義

size_t同無符號整型,表示sizeof的結果。

FILE用於存儲文件流信息的類型。

fpos_t用於存儲文件中的位置信息的類型。

NULL空指針常量值。

_IOFBF,_IOLBF, 和_IONBF 在setvbuf函數中使用。

BUFSIZ表示在setbuf函數中使用的buffer的大小的整型變量。

EOF是負整型變量,表示文件的末尾位置。

FOPEN_MAX同時最多可以打開的文件數。

FILENAME_MAX一個字符數組表示的文件名的最大長度。如果實現時希望盡量對文件名長度沒有限制,則這個值建議設置為最大值。

L_tmpnam由tmpnam函數創建的臨時文件的文件名最大長度。

SEEK_CUR,SEEK_END, 和SEEK_SET 用於函數 fseek。

TMP_MAX函數 tmpnam 能夠產生的唯一文件名的最大數。

stderr,stdin,和 stdout指向響應標准錯誤、標准輸入和標准輸出的 FILE類型的指針。

12.2. 流和文件

流促進了實現一個介於程序與IO設備之間的抽象層的方式。流允許在多樣的IO設備之間讀寫數據的操作。有兩種類型的流,分別是文本流和二進制流。

文本流是由行(line)組成的。每行有0或0個以上字符,並且由一個換行符標示一行的結束。數據的轉換發生在文本的輸出輸出中。文本流由可打印字符、制表符、換行符組成。空格不能在換行符之前出現,盡管這與具體的實現中讀取文本時是否移除空格有關。具體的實現至少要支持每行有254個字符(包括換行符)的情形。

二進制流輸入輸出是將數據以 1:1 比例傳輸的。沒有任何轉換存在,所有的字符都會被傳輸。

一個程序一旦啟動,就有標准輸入、標准輸出和標准錯誤三個可用流。

程序中所使用到的文件,必須先打開然後通過流進行操作。文件IO中所操作的點,由文件位置(file position)決定。當采用追加模式打開一個文件時,file position 指向文件尾,而其他方式打開時,則指向文件頭。file position 隨讀寫操作為變化,始終標示著下一次操作的位置。

關閉文件後,就不能對它進行任何操作了。從 main 函數退出時,所有被打開的文件都會被自動關閉。

12.3. 文件函數

12.3.1. clearerr

聲明:

void clearerr(FILE *stream);

清除流stream的文件尾指示器和錯誤指示器。在錯誤指示器被表示為有錯誤產生時,如果不調用clearerr 或者rewind函數,則任何流操作都會返回錯誤。

12.3.2. fclose

聲明:

int fclose(FILE *stream);

關閉流。所有的buffer都會被flush。如果關閉成功,則返回0,否則返回EOF。

12.3.3. feof

聲明:

int feof(FILE *stream);

檢查流stream是否到達文件尾。如果流到達文件尾,則返回非零值;如果流沒有到達文件尾,則返回零。(即返回非零表示到文件尾)

12.3.4. ferror

聲明:

int ferror(FILE *stream);

檢查錯誤指示器。如果有錯誤產生,則返回非零;如果錯誤指示器沒有被設置,則表明沒有錯誤,返回零。(即返回非零表示有錯誤)

12.3.5. fflush

聲明:

int fflush(FILE *stream);

Flush流 stream 的輸出 buffer。如果流是空指針,則所有輸出buffer 會被 flush。如果成功,返回零。錯誤則返回EOF。

12.3.6. fgetpos

聲明:

int fgetpos(FILE *stream, fpos_t *pos);

獲取到文件流的當前位置,將它寫到pos 中。如果成功,則返回0,如果錯誤則返回非零值,並且將錯誤碼存儲到變量errno中。

12.3.7. fopen

聲明:

FILE *fopen(const char *filename, const char *mode);

開啟一個由 filename 變量指定文件名的文件。打開的模式參數mode取值及含義如下:

r 讀取文本文件 w 寫入文本文件 (重置文件,或者創建文件) a 追加文本文件 (打開文件,或者創建文件,且為追加模式) rb 讀取二進制文件 wb 寫入二進制文件 (重置文件,或者創建文件) ab 追加二進制文件 (打開文件,或者創建文件,且為追加模式) r+ 讀取和寫入文本文件 w+ 讀取和寫入文本文件 (重置文件,或者創建文件) a+ 讀取和寫入文本文件 (打開文件,或者創建文件,且為追加模式) r+b或者 rb+ 讀取和寫入二進制文件 w+b或者 wb+ 讀取和寫入二進制文件 (重置文件,或者創建文件) a+b或者 ab+ 讀取和寫入二進制文件 (打開文件,或者創建文件,且為追加模式)

如果用 r 模式打開了不存在的文件,則 open 失敗。

如果用 a 模式打開文件,則無論當前文件位置在哪裡,所有的寫入操作都會以追加模式進行。

如果用+ 更新模式打開文件,因為此模式既可以輸入,也可以輸出,所以在每次在輸入與輸出操作之間切換時,必須使用函數 fseek, fsetpos, rewind,或 fflush。

打開文件成功,則返回指向文件的指針(根據不同模式,指向不同的位置)。打開失敗,則返回空指針。

12.3.8. fread

聲明:

size_t fread(void *ptr, size_tsize, size_t nmemb, FILE *stream);

將數據從流 stream 讀取到 ptr 所指示的數組。讀取nmemb 個 size 大小的元素。所以,讀取的總字節數為 (size*nmemb)。成功則返回讀取的元素個數,錯誤或到達文件尾則返回目前成功讀取的元素數(可能為0)。

12.3.9. freopen

聲明:

FILE *freopen(const char *filename, const char *mode, FILE *stream);

用給定的 stream來打開一個新的文件(由 filename 指定文件名)。此前打開的文件會被關閉。如果關閉舊文件而出現錯誤,錯誤會被忽略。模式參數 mode 與函數 fopen 中描述的一樣。通常用來重新連接 stdin, stdout,或者 stderr。成功則返回指向文件流的指針,錯誤則返回空指針。

12.3.10. fseek

聲明:

int fseek(FILE *stream, long intoffset, int whence);

設置文件流的file position 為給定的偏移量參數 offset。參數 offset 的偏移起始點,是參數 whence 指定的位置。參數whence 的可選值有:

SEEK_SET 從文件頭開始搜索。 SEEK_CUR 從文件當前位置開始搜索。 SEEK_END 從文件尾開始搜索。

在一個文本流中,參數 whence應該是 SEEK_SET,並且參數 offset 應該是0或者由ftell返回的一個值。

文件尾指示器被重置。錯誤指示器不被重置。

成功則返回0,錯誤則返回非零值。

12.3.11. fsetpos

聲明:

int fsetpos(FILE *stream, const fpos_t *pos);

設置流stream 的 file position為給定的 pos 。參數pos 是由函數 fgetpos給定的。文件尾指示器會被 clear 。成功則返回0。失敗則返回一個非零值,並且errno會被設置。

12.3.12. ftell

聲明:

long int ftell(FILE *stream);

返回文件流中當前的 file position。如果是一個二進制流,則值為從文件開始處到當前位置的字節數。如果是一個文本流,則值為 fseek函數使用的用來返回當前的文件位置的值。

成功則返回當前的 file position。錯誤則返回-1L,並且 errno被設置。

12.3.13. fwrite

聲明:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

將數據從ptr 指示的數組,寫入到流 stream 中。寫入 nmemb 個size 大小的元素。所以,總的寫入字節數為 (size*nmemb)。成功則返回寫入的元素個數。錯誤則返回成功寫入的元素個數(可能為0)。

12.3.14. remove

聲明:

int remove(const char *filename);

刪除文件(硬盤刪除),之後該文件無法在被訪問(解除到文件的連接)。如果當前文件是打開狀態,則結果由實現決定。成功則返回0。錯誤則返回非零值。

12.3.15. rename

聲明:

int rename(const char *old_filename, const char *new_filename);

將名為old_filename 文件,更名為 new_filename文件。如果由 new_filename 指定的文件名存在,則結果是由實現所確定的。成功則返回0。錯誤則返回一個非零值,並且仍可以通過舊文件名(old_filename)來訪問。

12.3.16. rewind

聲明:

void rewind(FILE *stream);

設置 file position為給定文件流的開始處。錯誤指示器和文件尾指示器會被重置。

12.3.17. setbuf

聲明:

void setbuf(FILE *stream, char *buffer);

定義流如何被緩沖(buffer)。這個函數要在打開流之後、任何操作還沒有進行之前被調用。輸入和輸出是全緩沖的(fully buffered)。默認值BUFSIZ是緩沖區的大小。參數 buffer 指向用作緩沖區的數組變量。如果 buffer 是一個空指針,則流被當做無緩沖的。

12.3.18. setvbuf

聲明:

int setvbuf(FILE *stream, char *buffer, int mode, size_tsize);

這個函數與 12.3.17 中的 setvbuf 函數功能相同,只是參數不同。參數mode 定義了流采取的緩沖方式,可以設置為如下值:

_IOFBF 輸入和輸出全緩沖(fully buffered)。如果緩沖區為空,一個輸入操作可以填充 buffer。On output the buffer will be completely filled至於輸出的情況,緩沖區在任何信息被寫入文件之前(或者流關閉)會被完全填滿. _IOLBF 輸入和輸出行緩沖(line buffered)。如果緩沖區為空,一個輸入操作可以填充 buffer。當向緩沖區寫入一個換行符時,緩沖區會被 flush。 _IONBF 輸入和輸出不緩沖(not buffered)。輸入和輸出都不緩沖。

參數buffer 指向當做緩沖區的數組。如果 buffer 為空指針,則setvbuf調用 malloc創建一個它自己的 buffer。

參數size 是 buffer 所指定的數組的大小。

成功則返回0。錯誤則返回非零值。

12.3.19. tmpfile

聲明:

FILE *tmpfile(void);

以二進制更新模式(wb+)創建臨時文件。當程序結束或者流被關閉時,tempfile會被移除。

成功則返回指向文件流的FILE指針,錯誤則返回空。

12.3.20. tmpnam

聲明:

char *tmpnam(char *str);

產生並返回一個當前不存在的可用文件名。最多產生TMP_MAX個不同的文件名。

如果參數str 是空指針,則函數返回一個指向可用文件名的指針。如果參數 str 是一個指向字符數組的有效指針,則產生的文件名會被寫入到這個數組,並且返回指向這個數組的指針。文件名長度的字節數最多為L_tmpnam。

該系列譯文在持續更新中

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved