13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

shmctl ($self->{SHMKEY}, IPC_RMID, 0) or warn "shmctl RMID: $!";$self->{SEMA}->remove() or warn "sema->remove: $!";}16.5. 套 接 字我 们 早 先 讨 论 的 IPC 机 制 都 有 一 个 非 常 严 重 的 局 限 : 它 们 是 设 计 用 来 在 运 行 在 同 一 台 计 算机 上 的 进 程 之 间 通 讯 用 的 。( 即 使 有 时 候 文 件 可 以 在 机 器 之 间 通 过 象 NFS 这 样 的 机 制 共 享 ,但 是 在 许 多 NFS 实 现 中 锁 都 会 奇 怪 地 失 败 , 这 样 实 际 上 就 不 可 能 对 文 件 进 行 并 发 访 问 了 。)对 于 通 用 目 的 的 网 络 通 讯 , 套 接 字 是 最 好 的 办 法 。 尽 管 套 接 字 是 在 BSD 里 发 明 的 , 但 它们 很 快 就 传 播 到 其 他 类 型 的 Unix 里 去 了 , 并 且 现 在 你 几 乎 可 以 在 可 以 在 任 何 能 用 的 操 作系 统 里 找 到 它 。 如 果 你 的 机 器 上 没 有 套 接 字 , 那 么 你 想 使 用 互 联 网 的 话 就 会 碰 到 无 数 的 麻 烦 。利 用 套 接 字 , 你 既 可 以 使 用 虚 电 路 ( 象 TCP 流 ) 也 可 以 使 用 数 据 报 ( 象 UDP 包 )。 你 甚至 可 以 做 得 更 多 , 取 决 于 你 的 系 统 。 不 过 最 常 见 的 套 接 字 编 程 用 的 是 基 于 互 联 网 际 的 套 接 字TCP, 因 此 我 们 在 这 里 介 绍 这 种 类 型 的 套 接 字 。 这 样 的 套 接 字 提 供 可 靠 的 联 接 , 运 行 起 来 有点 象 双 向 管 道 , 但 是 并 不 局 限 于 本 地 机 器 。 互 联 网 的 两 个 杀 手 级 的 应 用 ,email 和 web 浏览 , 都 几 乎 是 完 全 依 赖 于 TCP 套 接 字 的 。你 还 在 不 知 情 的 情 况 下 很 频 繁 地 使 用 了 UDP。 每 次 你 的 机 器 试 图 访 问 互 联 网 上 的 一 台 主机 , 它 都 向 你 的 DNS 服 务 器 发 送 一 个 UDP 包 请 求 其 真 实 的 IP 地 址 。 如 果 你 想 发 送 和接 收 数 据 报 , 那 么 你 也 可 以 自 己 使 用 UDP。 数 据 报 比 TCP 更 经 济 是 因 为 它 们 不 是 面 向 联接 的 ; 也 就 是 说 , 它 们 不 太 象 打 电 话 倒 是 象 发 信 件 。 但 是 UDP 同 样 也 缺 乏 TCP 提 供 的 可靠 性 , 这 样 它 就 更 适 合 那 些 你 不 在 乎 是 否 有 一 两 个 包 丢 掉 , 多 出 来 , 或 者 坏 掉 , 或 者 是 你 知道 更 高 层 的 协 议 将 强 制 某 种 程 度 的 冗 余 (DNS 就 是 这 样 ) 的 场 合 。还 有 其 他 选 择 , 但 是 非 常 少 见 。 你 可 以 使 用 Unix 域 套 接 字 , 但 是 只 能 用 于 本 地 通 讯 。 有许 多 其 他 系 统 支 持 各 种 其 他 的 并 非 基 于 IP 的 协 议 。 毫 无 疑 问 一 些 地 方 的 一 些 人 会 对 它 们 感兴 趣 , 但 是 我 们 将 只 会 略 微 提 到 它 们 。<strong>Perl</strong> 里 面 处 理 套 接 字 的 函 数 和 C 里 面 的 对 应 系 统 调 用 同 名 , 不 过 参 数 有 些 区 别 , 原 因 有二 : 首 先 ,<strong>Perl</strong> 的 文 件 句 柄 和 C 的 文 件 描 述 符 的 工 作 机 制 不 同 ; 第 二 ,<strong>Perl</strong> 已 经 知 道 它的 字 串 的 长 度 , 所 以 你 不 需 要 传 递 这 个 信 息 。 参 阅 第 二 十 九 章 获 取 关 于 与 套 接 字 相 关 的 系 统调 用 的 详 细 信 息 。老 的 <strong>Perl</strong> 的 套 接 字 代 码 有 一 个 问 题 是 人 们 会 使 用 硬 代 码 数 值 做 常 量 传 递 到 套 接 字 函 数 里 ,那 样 就 会 破 坏 移 植 性 。 和 大 多 数 系 统 调 用 一 样 , 与 套 接 字 相 关 的 系 统 调 用 在 失 败 的 时 候 会 礼貌 而 安 静 地 返 回 undef, 而 不 是 抛 出 一 个 例 外 。 因 此 检 查 这 些 函 数 的 返 回 值 是 很 重 要 的 ,442

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

Saved successfully!

Ooh no, something went wrong!