Manpages

NAME

flockfile, ftrylockfile, funlockfile - 爲 標 準 輸 入 輸 出 鎖 定 文 件 FILE

SYNOPSIS 總 覽

#include <stdio.h>

void flockfile(FILE *filehandle);
int ftrylockfile(FILE *
filehandle);
void funlockfile(FILE *
filehandle);

DESCRIPTION 描 述

標 準 輸 入 輸 出 庫 stdio 函 數 是 線 程 安 全 的 。 這 是 通 過 爲 每 個 文 件 對 象 FILE 賦 予 一 個 鎖 定 計 數 和 (當 鎖 定 計 數 非 零 時 ) 一 個 所 有 者 線 程 來 實 現 的 。 對 每 個 庫 函 數 調 用 , 這 些 函 數 等 待 直 到 文 件 對 象 FILE 不 再 被 一 個 不 同 的 線 程 鎖 定 , 然 後 鎖 定 它 , 進 行 所 需 的 I/O 操 作 , 再 次 對 它 解 鎖 。

(注 意 : 這 個 鎖 定 與 由 函 數 flock(2)lockf(3) 實 現 的 鎖 定 無 關 。 ) 所 有 這 些 操 作 對 C 程 序 員 來 說 都 是 不 可 見 的 , 但 是 有 兩 種 理 由 , 需 要 進 行 更 加 細 節 的 控 制 。 其 一 , 也 許 某 個 線 程 需 要 進 行 不 可 分 割 的 一 系 列 I/O 操 作 , 不 應 當 被 其 他 線 程 的 I/O 所 終 端 。 其 二 , 出 於 效 率 因 素 , 應 當 避 免 進 行 過 多 的 鎖 定 來 提 高 效 率 。 爲 此 , 一 個 線 程 可 以 顯 式 地 鎖 定 文 件 對 象 FILE, 接 着 進 行 它 的 一 系 列 I/O 操 作 , 然 後 解 鎖 。 這 樣 可 以 避 免 其 他 線 程 干 擾 。 如 果 這 樣 做 的 原 因 是 需 要 達 到 更 高 的 效 率 , 應 當 使 用 stdio 函 數 的 非 鎖 定 版 本 來 進 行 I/O 操 作 : 使 用 getc_unlocked() 和 putc_unlocked() 來 代 替 getc() 和 putc()。 函 數 flockfile() 等 待 *filehandle 不 再 被 其 他 的 線 程 鎖 定 , 然 後 使 當 前 線 程 成 爲 *filehandle 的 所 有 者 , 然 後 增 加 鎖 定 計 數 lockcount。 函 數 funlockfile() 減 少 鎖 定 計 數 。 函 數 ftrylockfile()flockfile() 的 非 鎖 定 版 本 。 它 在 其 他 線 程 擁 有 *filehandle 時 不 做 任 何 處 理 , 否 則 取 得 所 有 權 並 增 加 鎖 定 計 數 。

RETURN VALUE 返 回 值

函 數 ftrylockfile() 返 回 零 , 如 果 成 功 的 話 (獲 得 了 鎖 定 ); 如 果 失 敗 就 返 回 非 零 。

ERRORS

無 。

AVAILABILITY

這 些 函 數 當 定 義 了 _POSIX_THREAD_SAFE_FUNCTIONS 時 可 用 。 它 們 存 在 於 libc 5.1.1 之 後 的 libc 版 本 中 , 以 及 glibc 2.0 之 後 的 glibc 版 本 中

CONFORMING TO 標 準 參 考

POSIX.1

SEE ALSO 參 見

unlocked_stdio(3)

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