STDIO(3)

NAME
stdio - 標準輸入輸出庫函式

SYNOPSIS 總覽
#include <stdio.h>

FILE *stdin;
FILE *stdout;
FILE *stderr;

DESCRIPTION 描述
標註 I/O 庫函式提供了一個簡單而有效的，帶緩衝的流輸出輸出介面。輸入和輸出被對映為邏輯的資料流，物理的 I/O 特性則被隱藏起來。庫中包含的函式與宏列在下面；更多資訊可以從獨立的 man 手冊頁中得到。

將一個流關聯到一個外部檔案 (可能是一個物理裝置) 的方法是開啟 ( opening ) 這個檔案，其中可能牽涉到建立一個新檔案。建立已有的檔案使得檔案中已有的內容被丟棄。如果檔案支援定位請求 (例如磁碟檔案；但終端不是這樣)，那麼一個與檔案關聯的定位標記 ( file position indicator ) 被定位到檔案的起始 (0 位元組)，除非以追加模式開啟檔案。使用追加模式時，究竟定位標記位於檔案的開始還是結束是沒有指定的。定位標記由後續的讀、寫和定位請求來維護。從流中輸入時，就如同字元是連續地成功呼叫了函式 fgetc(3) 而讀入的；產生輸出時，就如同所有字元是連續地成功呼叫了函式 fputc(3) 而輸出的。

將一個流與一個與之關聯的檔案斷開的辦法是關閉 ( closing ) 這個檔案。在流與檔案斷開之前，輸出流被重新整理 (任何未寫入的緩衝的內容都被傳輸給主機環境)。在檔案被關閉之後，指向 FILE 物件的指標的值是不確定的 (無用資料)。

一個檔案可以繼續被相同的或是不同的程式實體再次開啟，它的內容可以被恢復或者修改 (如果它可以被重定位到檔案開始的話)。如果 main 函式返回到它最初的呼叫者，或者呼叫了函式 exit(3) ，在程式終止前，所有開啟的檔案都將被關閉 (因此所有的輸出流都被重新整理)。其他終止程式的方法，例如 abort(3) 不會進行正常的關閉檔案操作。

在程式啟動時，會預先定義三個文本流，它們不需要顯式地開啟 — 標準輸入 (用於讀入常規內容)，— 標準輸出 (用於輸出常規內容)，以及 標準錯誤 (用於輸出診斷資訊)。這些流的縮寫是 stdin，stdout 和 stderr 。在開啟時，標準錯誤流不會完全緩衝；當且僅當流不是一個互動的裝置時，標準輸入和標準輸出流才被完全緩衝。

指向終端裝置的輸出流總是預設使用行緩衝；未定的輸出總是在指向一個終端裝置的輸入流被讀取時自動被寫入。如果在一個輸出終端上列印了一行的一部分，然後運行了大量的計算後，應當在退出和計算前 fflush(3) 標準輸出，使得輸出可以顯示出來。(?)

標準輸入輸出庫 stdio 是函式庫 libc 的一部分，需要時可以被編譯器 cc(1) 和 pc(1) 自動載入。下列手冊頁的 SYNOPSIS 總覽 段落會指出要包含哪些檔案，函式定義的格式，以及它們受到哪些外部變數的影響。

下列為已定義的宏；如果不用 #undef 取消這些名稱的當前定義的話，是不能重新使用它們的： BUFSIZ, EOF, FILENAME_MAX, FOPEN_MAX, L_cuserid, L_ctermid, L_tmpnam, NULL, SEEK_END, SEEK_SET, SEE_CUR, TMP_MAX, clearerr, feof, ferror, fileno, fropen, fwopen, getc, getchar, putc, putchar, stderr, stdin, stdout. 另外，還有與這些宏的功能對應的，函式形式的版本 feof, ferror, clearerr, fileno, getc, getchar, putc, 和 putchar ，在顯式地取消宏的定義時，可以使用它們。

LIST OF FUNCTIONS 函式列表

Function 函式
    Description 描述

clearerr
    檢測並重置流狀態

fclose
    關閉流

fdopen
    開啟流

feof
    檢測並重置流狀態

ferror
    檢測並重置流狀態

fflush
    重新整理流

fgetc
    從輸入流中獲取下一個字元或詞

fgetpos
    重定位流

fgets
    從流中獲取一行

fileno
    返回流引數的整數形式的描述符

fopen
    開啟流

fprintf
    按照格式輸出常規內容

fpurge
    重新整理流

fputc
    向流輸出一個字元或詞

fputs
    向流輸出一行

fread
    二進位制輸入/輸出

freopen
    開啟流

fropen
    開啟流

fscanf
    按照格式輸入常規內容

fseek
    重定位流

fsetpos
    重定位流

ftell
    重定位流

fwrite
    二進位制輸入/輸出

getc
    從輸入流中獲取下一個字元或詞

getchar
    從輸入流中獲取下一個字元或詞

gets
    從流中獲取一行

getw
    從輸入流中獲取下一個字元或詞

mktemp
    建立 (唯一的) 臨時檔名

perror
    系統錯誤訊息

printf
    按照格式輸出常規內容

putc
    向流輸出一個字元或詞

putchar
    向流輸出一個字元或詞

puts
    向流輸出一行

putw
    向流輸出一個字元或詞

remove
    刪除目錄項

rewind
    重定位流

scanf
    按照格式輸入常規內容

setbuf
    流緩衝操作

setbuffer
    流緩衝操作

setlinebuf
    流緩衝操作

setvbuf
    流緩衝操作

sprintf
    按照格式輸出常規內容

sscanf
    按照格式輸入常規內容

strerror
    系統錯誤訊息

sys_errlist
    系統錯誤訊息

sys_nerr
    系統錯誤訊息

tempnam
    臨時檔案控制

tmpfile
    臨時檔案控制

tmpnam
    臨時檔案控制

ungetc
    向輸入流中退回字元

vfprintf
    按照格式輸出常規內容

vfscanf
    按照格式輸入常規內容

vprintf
    按照格式輸出常規內容

vscanf
    按照格式輸入常規內容

vsprintf
    按照格式輸出常規內容

vsscanf
    按照格式輸入常規內容

CONFORMING TO 標準參考
函式庫 stdio 遵循 ANSI X3.159-1989 (``ANSI C'') 標準。

SEE ALSO 參見
open(2), close(2), read(2), write(2), stdout(3)

跋
本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃：https://github.com/man-pages-zh/manpages-zh