Provided by: manpages-zh_1.6.3.6-1_all bug

NAME

       fopen, fdopen, freopen - 開啟流

SYNOPSIS 總覽

       #include <stdio.h>

       FILE *fopen(const char *path, const char *mode);
       FILE *fdopen(int fildes, const char *mode);
       FILE *freopen(const char *path, const char *mode, FILE *stream);

DESCRIPTION 描述

       函式 fopen 開啟檔名為 path 指向的字串的檔案,將一個流與它關聯。

       引數 mode 指向一個字串,以下列序列之一開始 (序列之後可以有附加的字元):

       r      開啟文字檔案,用於讀。流被定位於檔案的開始。

       r+     開啟文字檔案,用於讀寫。流被定位於檔案的開始。

       w      將檔案長度截斷為零,或者建立文字檔案,用於寫。流被定位於檔案的開始。

       w+     開啟檔案,用於讀寫。如果檔案不存在就建立它,否則將截斷它。流被定位於檔案的開始。

       a      開啟檔案,用於追加 (在檔案尾寫)。如果檔案不存在就建立它。流被定位於檔案的末尾。

       a+     開啟檔案,用於追加 (在檔案尾寫)。如果檔案不存在就建立它。讀檔案的初始位置是檔案的開
              始,但是輸出總是被追加到檔案的末尾。

       字串 mode 也可以包含字母 ``b''  作為最後一個字元,或者插入到上面提到的任何雙字元的字串的兩
       個字元中間。這樣只是為了和  ANSI  X3.159-1989  (``ANSI C'') 標準嚴格保持相容,沒有實際的效
       果;在所有的遵循 POSIX 的系統中,``b'' 都被忽略,包括 Linux。(其他系統可能將文字檔案和二進
       位制檔案區別對待,如果在進行二進位制檔案的  I/O,那麼新增 ``b'' 是個好主意,因為你的程式可
       能會被移植到非 Unix 環境中。)

       任何新建的檔案將具有模式 S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH  (0666),然後以程
       序的掩碼值 umask 加以修改 (參見 umask(2)) 。

       在讀/寫流上進行的讀和寫操作可以以任意的順序混合使用。注意  ANSI C 要求檔案定位函式只能插入
       在輸出和輸入之間,除非輸入操作遇到了檔案結束符。(如果沒有遇到這種情況,那麼讀取總是能返回
       除了最近寫入內容之外的結果。)  因此,最好 (在 Linux 中有時是必須的) 在對這樣的流進行的寫和
       讀操作之間加入一個  fseek  或是  fgetpos  操作。這個操作可以是對顯式的定位的呼叫   (例如在
       fseek(..., 0L, SEEK_CUR) 中那樣),利用同時發生的副作用。(?)

       以追加方式開啟檔案  (以 a 作為 mode 的第一個字元) 將使得所有後續的對這個流的寫操作發生在檔
       案末尾,就好像在寫之前呼叫了
              fseek(stream,0,SEEK_END);
       一樣。

       函式 fdopen 將一個流關聯到已存在的檔案描述符, fildes.  流的模式 mode (取值為  "r",  "r+",
       "w",  "w+",  "a", "a+" 之一) 必須與檔案描述符的模式想匹配。新的流的定位標識被設定為 fildes
       原有的值,錯誤和檔案結束標記被清除。模式 "w"  或者  "w+"  不會截斷檔案。檔案描述符不會被複
       制,在關閉由  fdopen  建立的流時,也不會被關閉。對共享記憶體物件實施 fdopen 的結果是未定義
       的。

       函式 freopen 開啟名稱為 path 指向的字串的檔案,將它與 stream 指向的流關聯。初始的流  (如果
       存在的話) 被關閉。引數 mode 與在函式 fopen 中用法一致。函式 freopen 主要的用處是改變與標準
       文字流 (stderr, stdin, 或 stdout) 相關聯的檔案

RETURN VALUE 返回值

       如果成功執行了 fopen, fdopenfreopen 將返回一個指向檔案物件  FILE  的指標。否則,將返回
       NULL 並將設定全域性變數 errno 的值來指示錯誤發生。

ERRORS

       EINVALfopen, fdopen, 或 freopen 提供的引數 mode 非法。

       函式 fopen, fdopenfreopen 也有可能失敗並置 errnomalloc(3) 指定的值。

       函式 fopen 也有可能失敗並置 errnoopen(2) 指定的值。

       函式 fdopen 也有可能失敗並置 errnofcntl(2) 指定的值。

       函式 freopen 也有可能失敗並置 errnoopen(2), fclose(3) 和 fflush(3) 指定的值。

CONFORMING TO 標準參考

       函式  fopenfreopen  遵循  ANSI  X3.159-1989 (``ANSI C'') 標準。函式 fdopen 遵循 IEEE
       Std1003.1-1988 (``POSIX.1'') 標準。

SEE ALSO 參見

       open(2), fclose(3), fileno(3)

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