Man page - setbuffer(3)

Packages contains this manual

Available languages:

en fr ja ro zh_TW zh_CN de

Manual

SETBUF

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


NAME

setbuf, setbuffer, setlinebuf, setvbuf - 流 緩 衝 操 作

SYNOPSIS 總 覽

#include <stdio.h>

void setbuf(FILE * stream , char * buf );
void setbuffer(FILE *
stream , char * buf , size_t size );
void setlinebuf(FILE *
stream );
int setvbuf(FILE *
stream , char * buf , int mode , size_t size );

DESCRIPTION 描 述

有 三 種 類 型 的 緩 衝 策 略 , 它 們 是 無 緩 衝 , 塊 緩 衝 和 行 緩 衝 。 當 輸 出 流 無 緩 衝 時 , 資 訊 在 寫 的 同 時 出 現 於 目 標 檔 案 或 終 端 上 ; 當 是 塊 緩 衝 時 , 字 元 被 暫 存 , 然 後 一 起 寫 入 ; 當 是 行 緩 衝 時 , 字 元 被 暫 存 , 直 到 要 輸 出 一 個 新 行 符 , 或 者 從 任 何 與 終 端 裝 置 連 線 的 流 中 (典 型 的 是 stdin) 讀 取 輸 入 時 才 輸 出 。 函 式 fflush (3) 可 以 用 來 強 制 提 前 輸 出 。 (參 見 fclose (3)) 通 常 所 有 檔 案 都 是 塊 緩 衝 的 。 當 檔 案 I/O 操 作 在 檔 案 上 發 生 時 , 將 呼 叫 malloc (3) , 獲 得 一 個 緩 衝 。 如 果 流 指 向 一 個 終 端 (通 常 stdout 都 是 這 樣 ), 那 麼 它 是 行 緩 衝 的 。 標 準 錯 誤 流 stderr 預 設 總 是 無 緩 衝 的 。

函 式 setvbuf 可 以 用 在 任 何 開 啟 的 流 上 , 改 變 它 的 緩 衝 。 引 數 mode 必 須 是 下 列 三 個 宏 之 一 :

_IONBF

無 緩 衝

_IOLBF

行 緩 衝

_IOFBF

完 全 緩 衝

除 非 是 無 緩 衝 的 檔 案 , 否 則 引 數 buf 應 當 指 向 一 個 長 度 至 少 為 size 位 元 組 的 緩 衝 ; 這 個 緩 衝 將 取 代 當 前 的 緩 衝 。 如 果 引 數 buf NULL , 只 有 這 個 模 式 會 受 到 影 響 ; 下 次 read 或 write 操 作 還 將 分 配 一 個 新 的 緩 衝 。 函 式 setvbuf 只 能 在 開 啟 一 個 流 , 還 未 對 它 進 行 任 何 其 他 操 作 之 前 使 用 。

其 他 三 個 函 式 呼 叫 是 函 式 setvbuf 的 別 名 , 函 式 setbuf 與 使 用 下 列 語 句 完 全 等 價 :

setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

函 式 setbuffer 與 此 相 同 , 但 是 緩 衝 的 長 度 由 使 用 者 決 定 , 而 不 是 由 預 設 值 BUFSIZ 決 定 。 函 式 setlinebuf 與 使 用 下 列 語 句 完 全 等 價 :

setvbuf(stream, (char *)NULL, _IOLBF, 0);

RETURN VALUE 返 回 值

函 式 setvbuf 成 功 執 行 時 返 回 0。 它 失 敗 時 可 能 返 回 任 何 值 , 但 是 當 It can return any value on failure, but returns nonzero when mode 不 正 確 , 或 者 不 能 實 現 請 求 時 , 必 須 返 回 非 零 值 。 它 在 失 敗 時 可 能 設 定 errno 。 其 他 函 式 沒 有 返 回 值 。

CONFORMING TO 標 準 參 考

函 式 setbuf setvbuf 遵 循 ANSI X3.159-1989 (‘‘ANSI C’’) 標 準 。

BUGS

函 式 setbuffer setlinebuf 無 法 移 植 到 4.2BSD 之 前 的 BSD 版 本 , 在 Linux 中 僅 在 libc 4.5.21 之 後 的 系 統 中 可 用 。 在 4.2BSD 和 4.3BSD 系 統 中 , setbuf 總 是 使 用 非 最 優 的 緩 衝 大 小 , 應 當 避 免 使 用 它 。

stream 被 關 閉 時 , 必 須 確 保 buf 和 它 指 向 的 空 間 仍 然 存 在 。 這 通 常 發 生 在 程 式 終 止 時 。

例 如 , 下 列 呼 叫 是 非 法 的 :

#include <stdio.h>
int main()
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}

SEE ALSO 參 見

fclose (3), fflush (3), fopen (3), fread (3), malloc (3), printf (3), puts (3)

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