推荐答案
在 Ruby 中,可以使用 IO.pipe 方法来创建管道,并通过管道进行进程间通信。以下是一个简单的示例:
// www.javascriptcn.com code example
# 创建管道
reader, writer = IO.pipe
# 创建子进程
child_pid = fork do
# 关闭写端
writer.close
# 从管道读取数据
message = reader.read
puts "Child received: #{message}"
# 关闭读端
reader.close
end
# 关闭读端
reader.close
# 向管道写入数据
writer.puts "Hello from parent process"
# 关闭写端
writer.close
# 等待子进程结束
Process.wait(child_pid)在这个示例中,父进程通过管道向子进程发送消息,子进程从管道中读取消息并输出。
本题详细解读
1. 管道的创建
IO.pipe 方法会返回两个 IO 对象,分别代表管道的读端和写端。父进程和子进程可以通过这两个 IO 对象进行通信。
reader, writer = IO.pipe
2. 子进程的创建
使用 fork 方法创建子进程。在子进程中,通常会关闭不需要的管道端。例如,子进程只需要从管道中读取数据,因此可以关闭写端。
child_pid = fork do
writer.close
message = reader.read
puts "Child received: #{message}"
reader.close
end3. 父进程的操作
在父进程中,通常会关闭不需要的管道端。例如,父进程只需要向管道中写入数据,因此可以关闭读端。
reader.close writer.puts "Hello from parent process" writer.close
4. 等待子进程结束
父进程使用 Process.wait 方法等待子进程结束,以确保子进程能够完成其任务。
Process.wait(child_pid)
5. 管道的关闭
在通信完成后,应该关闭管道的两端,以释放资源。
reader.close writer.close
通过这种方式,Ruby 程序可以利用管道进行进程间通信,实现数据的传递。