.\" Copyright (c) 1990, 1991 Regents of the University of California. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)stdio.3 6.5 (Berkeley) 5/6/91 .\" .\" Converted for Linux, Mon Nov 29 16:07:22 1993, faith@cs.unc.edu .\" Modified, 2001-12-26, aeb .\" .TH STDIO 3 2001-12-26 "" "Linux Programmer's Manual" .SH NAME stdio \- 標準輸入輸出庫函數 .SH "SYNOPSIS 總覽" .B #include .sp .B FILE *stdin; .br .B FILE *stdout; .br .B FILE *stderr; .SH "DESCRIPTION 描述" 標注 I/O 庫函數提供了一個簡單而有效的,帶緩沖的流輸出輸出接口。輸入和輸出被映射為邏輯的數據流,物理的 I/O 特性則被隱藏起來。庫中包含的函數與宏列在下面;更多信息可以從獨立的 man 手冊頁中得到。 .PP 將一個流關聯到一個外部檔案 (可能是一個物理設備) 的方法是打開 ( .I opening ) 這個檔案,其中可能牽涉到創建一個新檔案。創建已有的檔案使得檔案中已有的內容被丟棄。如果檔案支持定位請求 (例如磁碟檔案;但終端不是這樣),那麼一個與檔案關聯的定位標記 ( .I file position indicator ) 被定位到檔案的起始 (0 字節),除非以追加模式打開檔案。使用追加模式時,究竟定位標記位於檔案的開始還是結束是沒有指定的。定位標記由後續的讀、寫和定位請求來維護。從流中輸入時,就如同字符是連續地成功調用了函數 .BR fgetc (3) 而讀入的;產生輸出時,就如同所有字符是連續地成功調用了函數 .BR fputc (3) 而輸出的。 .PP 將一個流與一個與之關聯的檔案斷開的辦法是關閉 ( .I closing ) 這個檔案。在流與檔案斷開之前,輸出流被刷新 (任何未寫入的緩沖的內容都被傳輸給主機環境)。在檔案被關閉之後,指向 .B FILE 對象的指針的值是不確定的 (無用數據)。 .PP 一個檔案可以繼續被相同的或是不同的程式實體再次打開,它的內容可以被恢復或者修改 (如果它可以被重定位到檔案開始的話)。如果 main 函數返回到它最初的調用者,或者調用了函數 .BR exit (3) ,在程式終止前,所有打開的檔案都將被關閉 (因此所有的輸出流都被刷新)。其他終止程式的方法,例如 .BR abort (3) 不會進行正常的關閉檔案操作。 .PP 在程式啟動時,會預先定義三個文本流,它們不需要顯式地打開 \(em .I 標準輸入 (用於讀入常規內容),\(em .I 標準輸出 (用於輸出常規內容),以及 .I 標準錯誤 (用於輸出診斷信息)。這些流的縮寫是 .IR stdin,stdout 和 .IR stderr 。在打開時,標準錯誤流不會完全緩沖;當且僅當流不是一個交互的設備時,標準輸入和標準輸出流才被完全緩沖。 .PP 指向終端設備的輸出流總是預設使用行緩沖;未定的輸出總是在指向一個終端設備的輸入流被讀取時自動被寫入。如果在一個輸出終端上列印了一行的一部分,然後運行了大量的計算後,應當在退出和計算前 .BR fflush (3) 標準輸出,使得輸出可以顯示出來。(?) .PP 標準輸入輸出庫 .B stdio 是函數庫 .B libc 的一部分,需要時可以被編譯器 .BR cc (1) 和 .BR pc (1) 自動加載。下列手冊頁的 .B "SYNOPSIS 總覽" 段落會指出要包含哪些檔案,函數定義的格式,以及它們受到哪些外部變量的影響。 .PP 下列為已定義的宏;如果不用 .BR #undef 取消這些名稱的當前定義的話,是不能重新使用它們的: .BR BUFSIZ , .BR EOF , .BR FILENAME_MAX , .BR FOPEN_MAX , .BR L_cuserid , .BR L_ctermid , .BR L_tmpnam, .BR NULL , .BR SEEK_END , .BR SEEK_SET , .BR SEE_CUR , .BR TMP_MAX , .BR clearerr , .BR feof , .BR ferror , .BR fileno , .BR fropen , .BR fwopen , .BR getc , .BR getchar , .BR putc , .BR putchar , .BR stderr , .BR stdin , .BR stdout . 另外,還有與這些宏的功能對應的,函數形式的版本 .BR feof , .BR ferror , .BR clearerr , .BR fileno , .BR getc , .BR getchar , .BR putc , 和 .B putchar ,在顯式地取消宏的定義時,可以使用它們。 .SH "LIST OF FUNCTIONS 函數列表" .TP 10n .B "Function 函數" .B "Description 描述" .TP .B clearerr 檢測並重置流狀態 .TP .B fclose 關閉流 .TP .B fdopen 打開流 .TP .B feof 檢測並重置流狀態 .TP .B ferror 檢測並重置流狀態 .TP .B fflush 刷新流 .TP .B fgetc 從輸入流中獲取下一個字符或詞 .\" .TP .\" .B fgetline .\" get a line from a stream (BSD only; renamed to fgetln()) .TP .B fgetpos 重定位流 .TP .B fgets 從流中獲取一行 .TP .B fileno 返回流參數的整數形式的描述符 .TP .B fopen 打開流 .TP .B fprintf 按照格式輸出常規內容 .TP .B fpurge 刷新流 .TP .B fputc 向流輸出一個字符或詞 .TP .B fputs 向流輸出一行 .TP .B fread 二進制輸入/輸出 .TP .B freopen 打開流 .TP .B fropen 打開流 .TP .B fscanf 按照格式輸入常規內容 .TP .B fseek 重定位流 .TP .B fsetpos 重定位流 .TP .B ftell 重定位流 .TP .B fwrite 二進制輸入/輸出 .TP .B getc 從輸入流中獲取下一個字符或詞 .TP .B getchar 從輸入流中獲取下一個字符或詞 .TP .B gets 從流中獲取一行 .TP .B getw 從輸入流中獲取下一個字符或詞 .TP .B mktemp 創建 (唯一的) 臨時檔名 .TP .B perror 系統錯誤消息 .TP .B printf 按照格式輸出常規內容 .TP .B putc 向流輸出一個字符或詞 .TP .B putchar 向流輸出一個字符或詞 .TP .B puts 向流輸出一行 .TP .B putw 向流輸出一個字符或詞 .TP .B remove 刪除目錄項 .TP .B rewind 重定位流 .TP .B scanf 按照格式輸入常規內容 .TP .B setbuf 流緩沖操作 .TP .B setbuffer 流緩沖操作 .TP .B setlinebuf 流緩沖操作 .TP .B setvbuf 流緩沖操作 .TP .B sprintf 按照格式輸出常規內容 .TP .B sscanf 按照格式輸入常規內容 .TP .B strerror 系統錯誤消息 .TP .B sys_errlist 系統錯誤消息 .TP .B sys_nerr 系統錯誤消息 .TP .B tempnam 臨時檔案控制 .TP .B tmpfile 臨時檔案控制 .TP .B tmpnam 臨時檔案控制 .TP .B ungetc 向輸入流中退回字符 .TP .B vfprintf 按照格式輸出常規內容 .TP .B vfscanf 按照格式輸入常規內容 .TP .B vprintf 按照格式輸出常規內容 .TP .B vscanf 按照格式輸入常規內容 .TP .B vsprintf 按照格式輸出常規內容 .TP .B vsscanf 按照格式輸入常規內容 .SH "CONFORMING TO 標準參考" 函數庫 .B stdio 遵循 ANSI X3.159-1989 (``ANSI C'') 標準。 .SH "SEE ALSO 參見" .BR open (2), .BR close (2), .BR read (2), .BR write (2), .BR stdout (3)