当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby IO.pipe用法及代码示例


本文简要介绍ruby语言中 IO.pipe 的用法。

用法

pipe → [read_io, write_io]
pipe(ext_enc) → [read_io, write_io]
pipe("ext_enc:int_enc" [, opt]) → [read_io, write_io]
pipe(ext_enc, int_enc [, opt]) → [read_io, write_io]
pipe(...) {|read_io, write_io| ... }

创建一对管道端点(相互连接)并将它们作为 IO 对象的二元素数组返回:[ read_iowrite_io ]

如果给定一个块,则调用该块并返回该块的值。 read_iowrite_io 作为参数发送到块。如果 read_io 和 write_io 在块退出时没有关闭,则它们已关闭。即关闭 read_io 和/或 write_io 不会导致错误。

并非在所有平台上都可用。

如果将编码(编码名称或编码对象)指定为可选参数,则从管道中读取的字符串将使用指定的编码进行标记。如果参数是冒号分隔的两个编码名称“A:B”,则读取的字符串从编码A(外部编码)转换为编码B(内部编码),然后标记为B。如果指定了两个可选参数,则必须是编码对象或编码名称,第一个是外部编码,第二个是内部编码。如果指定了外部编码和内部编码,可选的散列参数指定转换选项。

在下面的示例中,两个进程关闭了它们不使用的管道末端。这不仅仅是一种化妆品。如果管道仍处于打开状态,则管道的读取端不会生成文件结束条件。在父进程的情况下,如果 rd.read 不首先发出 wr.close ,它将永远不会返回。

rd, wr = IO.pipe

if fork
  wr.close
  puts "Parent got: <#{rd.read}>"
  rd.close
  Process.wait
else
  rd.close
  puts "Sending message to parent"
  wr.write "Hi Dad"
  wr.close
end

产生:

Sending message to parent
Parent got: <Hi Dad>

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 IO.pipe。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。