名 前
flockfile, ftrylockfile, funlockfile − 標 準 入 出 力 FILE の ロ ッ ク を 行 う
書 式
#include <stdio.h>
void
flockfile(FILE *filehandle);
int ftrylockfile(FILE *filehandle);
void funlockfile(FILE *filehandle);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ): 上 記 の 全 て の 関 数 :
_POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE || _POSIX_SOURCE
説 明
標 準 入 出 力 関 数 は ス レ ッ ド セ ー フ で あ る 。 こ れ は 、 各 FILE オ ブ ジ ェ ク ト に 対 し 、 ロ ッ ク 数 (lockcount) と (ロ ッ ク 数 が 0 で な い 場 合 は ) 所 有 者 ス レ ッ ド (owner thread) を 管 理 す る こ と で 実 現 さ れ る 。 ラ イ ブ ラ リ の 呼 び 出 し が 行 わ れ る 毎 に 、 標 準 入 出 力 関 数 は FILE オ ブ ジ ェ ク ト が 他 の ス レ ッ ド に よ っ て ロ ッ ク さ れ て い な い 状 態 に な る ま で 待 ち 、 FILE オ ブ ジ ェ ク ト を ロ ッ ク し 、 要 求 さ れ て 入 出 力 を 行 い 、 オ ブ ジ ェ ク ト の ロ ッ ク を 解 除 す る 。
(注 : こ の ロ ッ ク は 、 flock(2) や lockf(3) と い っ た 関 数 が 行 う ロ ッ ク と は 全 く 無 関 係 で あ る 。 ) こ れ ら の こ と は す べ て C プ ロ グ ラ マ に は 見 え な い 部 分 で 行 わ れ る が 、 よ り 細 か い 制 御 が で き た 方 が よ い 理 由 が 2つ あ る だ ろ う 。 一 つ は 、 一 つ の ス レ ッ ド が 行 う 一 連 の 入 出 力 動 作 は 一 緒 に 行 わ れ 、 他 の ス レ ッ ド の 入 出 力 に よ っ て 中 断 さ れ な い 方 が よ い と い う こ と で あ ろ う 。 も う 一 つ は 、 効 率 を 大 き く 上 げ る た め に は ロ ッ ク の オ ー バ ヘ ッ ド を 避 け る 必 要 が あ る と い う こ と で あ ろ う 。 こ の 目 的 を 実 現 す る た め に 、 FILE オ ブ ジ ェ ク ト の ロ ッ ク 、 一 連 の 入 出 力 動 作 の 実 行 、 ロ ッ ク の 解 除 を ス レ ッ ド が 明 示 的 に 指 示 す る こ と が で き る 。 こ れ に よ り 、 他 の ス レ ッ ド が 途 中 で 入 出 力 を 行 う の を 防 止 す る 。 こ の よ う な こ と を 行 う 理 由 が 効 率 の 向 上 で あ る な ら ば 、 ロ ッ ク を 行 わ な い バ ー ジ ョ ン の 標 準 入 出 力 関 数 を 使 う こ と も で き る 。 例 え ば 、 getc(3) や putc(3) の 代 わ り に getc_unlocked(3) や putc_unlocked(3) を 使 用 す る 。
flockfile() 関 数 は 、 *filehandle が 他 の ス レ ッ ド に ロ ッ ク さ れ て い な い 状 態 に な る ま で 待 っ た の ち 、 現 在 の ス レ ッ ド を *filehandle の オ ー ナ に 設 定 し 、 ロ ッ ク 数 を 加 算 す る 。
funlockfile() 関 数 は 、 ロ ッ ク 数 を 減 算 す る 。
ftrylockfile() 関 数 は flockfile() の ブ ロ ッ キ ン グ を 行 わ な い バ ー ジ ョ ン で あ る 。 他 の ス レ ッ ド が *filehandle を ロ ッ ク し て い る 時 は 何 も 行 わ ず 、 そ う で な い 場 合 は *filehandle の 所 有 権 を 獲 得 し 、 ロ ッ ク 数 を 加 算 す る 。
返 り 値
ftrylockfile() 関 数 は ロ ッ ク に 成 功 す る と 0 を 返 し 、 失 敗 し た 場 合 は 0 以 外 の 値 を 返 す 。
エ ラ ー
な し 。
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 flockfile(), ftrylockfile(), funlockfile() は ス レ ッ ド セ ー フ で あ る 。
準 拠
POSIX.1−2001.
可 用 性
_POSIX_THREAD_SAFE_FUNCTIONS が 定 義 さ れ て い る と き に こ れ ら の 関 数 を 使 用 す る こ と が で き る 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。