13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

or die "can't write-lock counterfile: $!";$counter = || 0;# 首 先 应 该 undefseek(FH, 0, 0)or die "can't rewind counterfile :$!";print FH $counter+1, "\n"or die "can't write counterfile: $!";# 下 一 行 在 这 个 程 序 里 从 技 术 上 是 肤 浅 的 , 但 是 一 个 一 般 情 况 下 的 好 主 意truncate(FH, tell(FH))or die "can't truncate counterfile: $!";close(FH)or die "can't close counterfile: $!";你 不 能 锁 住 一 个 你 还 没 打 开 的 文 件 , 而 且 你 无 法 拥 有 一 个 施 加 于 多 个 文 件 的 锁 。 你 能 做 的 是用 一 个 完 全 独 立 的 文 件 充 当 某 种 信 号 灯 ( 象 交 通 灯 ), 通 过 在 这 个 信 号 灯 文 件 上 使 用 普 通 的共 享 和 排 它 锁 来 提 供 可 控 制 的 对 其 他 东 西 ( 文 件 ) 的 访 问 。 这 个 方 法 有 几 个 优 点 。 你 可 以 用一 个 文 件 来 控 制 对 多 个 文 件 的 访 问 , 从 而 避 免 那 种 一 个 进 程 试 图 以 一 种 顺 序 锁 住 那 些 文 件 而另 外 一 个 进 程 试 图 以 其 他 顺 序 锁 住 那 些 文 件 导 致 的 死 锁 。 你 可 以 用 信 号 灯 文 件 锁 住 整 个 目 录里 的 文 件 。 你 甚 至 可 以 控 制 对 那 些 就 不 在 文 件 系 统 上 的 东 西 的 访 问 , 比 如 一 个 共 享 内 存 对 象或 者 是 一 个 若 干 个 预 先 分 裂 出 来 的 服 务 器 准 备 调 用 accept 的 套 接 字 。如 果 你 有 一 个 DBM 文 件 , 而 且 这 个 DBM 文 件 没 有 明 确 的 锁 定 机 制 , 那 么 用 一 个 附 属 的锁 文 件 就 是 控 制 多 个 客 户 并 发 访 问 的 最 好 的 方 法 。 否 则 , 你 的 DBM 库 的 内 部 缓 冲 就 可 能与 磁 盘 上 的 文 件 之 间 丢 失 同 步 。 在 调 用 dbmopen 或 者 tie 之 前 , 先 打 开 并 锁 住 信 号 灯 文件 。 如 果 你 用 O_RDONLY 打 开 数 据 库 , 那 你 会 愿 意 使 用 LOCK_SH 处 理 锁 定 。 否 则 ,使 用 LOCK_EX 用 于 更 新 数 据 库 的 排 它 访 问 。( 同 样 , 只 有 所 有 当 事 人 都 同 意 关 注 信 号 灯才 有 效 。)use Fcntl qw(:DEFAULT :flock);use DB_File;# 只 是 演 示 用 途 , 任 何 db 都 可 以420

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!