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, fdopen 和 freopen 將 返 回 一 個 指 向 文 件 對 象 FILE 的 指 針 。 否 則 , 將 返 回 NULL 並 將 設 置 全 局 變 量 errno 的 值 來 指 示 錯 誤 發 生 。
ERRORS
EINVAL 爲 |
fopen, fdopen, 或 freopen 提 供 的 參 數 mode 非 法 。 |
函 數 fopen, fdopen 和 freopen 也 有 可 能 失 敗 並 置 errno 爲 malloc(3) 指 定 的 值 。 函 數 fopen 也 有 可 能 失 敗 並 置 errno 爲 open(2) 指 定 的 值 。 函 數 fdopen 也 有 可 能 失 敗 並 置 errno 爲 fcntl(2) 指 定 的 值 。 函 數 freopen 也 有 可 能 失 敗 並 置 errno 爲 open(2), fclose(3) 和 fflush(3) 指 定 的 值 。
CONFORMING TO 標 準 參 考
函 數 fopen 和 freopen 遵 循 ANSI X3.159-1989 (’’ANSI C’’) 標 準 。 函 數 fdopen 遵 循 IEEE Std1003.1-1988 (’’POSIX.1’’) 標 準 。
SEE ALSO 參 見
跋
本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh