Man page - fopen(3)

Packages contains this manual

Available languages:

en fr pl ja ru zh_TW zh_CN de

Manual

FOPEN

NAME
SYNOPSIS 總 覽
DESCRIPTION 描 述
RETURN VALUE 返 回 值
ERRORS
CONFORMING TO 標 準 參 考
SEE ALSO 參 見


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 參 見

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

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