Manpages

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

EINVAL

fopen, 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