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