Manpages

NAME

fifo − 先 进 先 出 的 特 殊 文 件 , 又 名 管 道

描 述 (DESCRIPTION)

一 个 FIFO 特 殊 文 件 (又 名 管 道 ) 同 管 道 线 相 似 , 但 是 它 是 作 为 文 件 系 统 的 一 部 分 访 问 的 . 可 以 有 多 个 进 程 打 开 它 以 供 读 写 . 当 进 程 通 过 FIFO 交 换 数 据 的 时 候 , 内 核 在 内 部 传 送 所 有 数 据 而 不 会 把 它 写 入 文 件 系 统 , 也 就 是 说 FIFO 特 殊 文 件 在 文 件 系 统 中 没 有 任 何 内 容 , 文 件 系 统 项 只 是 作 为 进 程 可 以 用 文 件 系 统 中 的 一 个 名 字 来 访 问 管 道 的 一 个 参 照 点 .

内 核 会 为 至 少 有 一 个 进 程 打 开 了 的 FIFO 特 殊 文 件 维 护 并 且 也 只 维 护 一 个 管 道 对 象 . 在 数 据 传 给 FIFO 之 前 , FIFO 的 两 端 (读 和 写 ) 必 须 同 时 打 开 . 一 般 来 说 打 开 FIFO 会 阻 塞 直 至 另 一 端 也 打 开 .

一 个 进 程 可 以 以 非 阻 塞 模 式 打 开 一 个 FIFO. 这 种 情 况 下 , 即 使 写 端 没 有 打 开 , 打 开 读 端 还 是 会 成 功 , 但 是 , 如 果 读 端 没 有 打 开 , 打 开 写 端 会 失 败 , 并 且 得 到 一 个 ENXIO (设 备 或 地 址 不 存 在 ).

在 Linux 下 , 不 管 是 阻 塞 还 是 非 阻 塞 模 式 , 打 开 一 个 FIFO 用 作 读 和 写 都 会 成 功 . POSIX 关 于 这 种 情 况 没 有 定 义 . 这 个 可 以 用 来 在 读 端 没 有 打 开 的 情 况 下 打 开 写 端 . 一 个 进 程 在 同 时 用 FIFO 的 两 端 来 和 自 己 通 信 的 时 候 要 特 别 注 意 以 防 死 锁 .

注 意 (NOTES)

当 一 个 进 程 企 图 向 读 端 没 有 打 开 的 FIFO 写 数 据 的 时 候 , 进 程 会 收 到 一 个 SIGPIPE 信 号 . FIFO 特 殊 文 件 可 以 用 mkfifo(3) 来 创 建 并 且 ls -l 会 给 它 一 个 特 殊 的 标 记 .

参 见 (SEE ALSO)

mkfifo(3), mkfifo(1), pipe(2), socketpair(2), open(2), signal(2), sigaction(2)

[中 文 版 维 护 人 ]

唐 友 <tony_ty [AT] 263.net>

[中 文 版 最 新 更 新 ]

2001/10/9

[中 国 Linux论 坛 man手 册 页 翻 译 计 划 ]

http://cmpp.linuxforum.net