#!/usr/bin/ruby
require "io/wait"
require 'pp'
rd, wr = IO.pipe
#Process.sync = true
Process.fork do
puts "Sending message to parent"
File.open("/home/alisoft/test.dump") do |f|
f.each do |l|
wr << l
#wr.flush
sleep rand(5)
end
end
wr.close
p "Write pipe closed."
end
Process.fork do
sl = ""
loop do
case rd.ready?
when Fixnum
p "Parent got: <#{rd.read(rd.ready?)}>"
when true,false,nil
#false eq rd.eof?
begin
p "Parent got: <#{rd.readpartial(1000)}>"
#这里用read方法的话会产生堵塞,
#用readpartial的话会不知道现有内容的长度。
rescue EOFError
(rd.close;exit(0)) if rd.eof?
end
else
#do nothing
end
p Time.now.to_s
end
end
puts "Main is going down"
pp Process.waitall
puts "Main over"
Ruby有堵塞和非堵塞管道两种实现。
感觉这种通信方式不如Socket,这个虽然快,但Socket更容易扩展,
比如使用内存Cache,只是不能将信号和数据一次就传过来,
1、A先告诉B内存Cache里面有新东西了,去更新吧。
2、B收到,更新了。
用System V的信号也好,32-64之间的信号可自定义,只是数据如何传递还要另想办法。
分享到:
相关推荐
命名管道是Windows系统提供的一种进程通信机制,通过使用命名管道,两个进程可以进行通信。在本实验中,我们将使用命名管道实现两个进程之间的通信,并介绍相关的API和操作步骤。 一、实验目的: 1. 了解 Windows ...
如果需要更复杂的通信,如双向通信或跨进程通信,可以考虑使用命名管道(命名管道在文件系统中有路径,可以被任何知道路径的进程访问)、套接字(Socket)或其他更高级的IPC机制。 通过熟练掌握匿名管道的使用,...
在实验中,我们编写一个程序,使用系统调用 fork 生成 3 个子进程,并使用系统调用 pipe 创建一个管道,使得这 3 个子进程和父进程共用同一个管道进行通信。 在实验中,我们使用了多种系统调用,包括 fork()、pipe...
编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2 分别向管道各写一句话: Child1 is sending a message! Child2 is sending a message! 而父进程则从管道中读出来自于...
本次实验是关于操作系统中的进程通信,主要涉及了进程的创建、控制、以及多种通信方式,包括信号通信和管道通信。通过实验,目的是加深对进程概念的理解,掌握并发执行的本质,并学习如何解决进程间的互斥问题。实验...
总结起来,这个实验加深了对操作系统中进程通信的理解,尤其是管道通信的概念。通过实践,我们学习了如何创建管道、读写管道以及如何在父子进程中协调通信。这对于理解和开发多进程应用程序,特别是在需要进程间数据...
管道是一种特殊类型的文件,它允许相关进程之间进行单向通信。在这个实验中,我们关注三个具体任务。 ### 任务1 这个任务涉及创建一个父子进程的通信链路。首先,父进程调用pipe()系统调用来创建管道,然后fork()...
【进程的管道通信】知识点详解 ...通过这个实验,可以深入理解进程的概念,进程通信的机制,以及在Linux系统中如何实现这些功能。这不仅有助于理解操作系统的基本原理,也为编写多进程应用程序打下了基础。
本实验旨在通过实践操作,帮助学习者深入理解管道的工作原理及其应用,并掌握如何使用管道来实现进程间的简单通信。 #### 实验内容 ##### 1. 了解系统调用`pipe()`的功能和实际原理 在Linux系统中,`pipe()`是一...
进程间通信的一种方式,Pipes:管道,分为无名管道:在父子进程间交换数据;有名管道:可在不同主机间交换数据,分为服务器方和客户方,在Win9X下只支持有名管道客户。 1、进程间通信 2、管道Pipe通信
使用系统调用pipe()建立一个管道,两个子进程分别向管道写信息,父进程则从管道读出来自子进程的信息,显示在屏幕上,记录屏幕的显示结果,分析原因。 任务 编制一段程序,实现进程的管道通信。使用系统调用pipe()...
命名管道在Windows操作系统中被广泛使用,特别是在需要跨进程通信的场景下。它们提供了比无名管道更强大的功能,如双向通信和安全性控制。在MFC中实现命名管道,我们需要利用MFC的CNamedPipe类。这个类封装了Windows...
使用系统调用pipe()建立一个管道,两个子进程分别向管道写信息,父进程则从管道读出来自子进程的信息,显示在屏幕上,记录屏幕的显示结果,分析原因。 任务 编制一段程序,实现进程的管道通信。使用系统调用pipe()...
在本案例中,"命名管道双管道跨进程通信多线程封装"着重讲解了如何利用命名管道来实现跨进程的数据传输,并且考虑到了多线程环境下的封装和效率优化。 首先,我们要理解命名管道的基本概念。命名管道是一种半双工...
总之,通过理解和应用QT的命名管道机制,开发者可以构建出高效、可扩展的多进程通信系统,同时能够与其他语言的应用(如C#)无缝对接,提升系统的整体性能和灵活性。在设计这样的系统时,应充分考虑并发控制、数据...
Linux 进程通信是指在操作系统中,多个进程之间进行数据交换和同步的机制。在 Linux 中,进程通信可以通过信号、管道和共享内存等方式实现。 一、信号机制 在 Linux 中,信号是一种异步通信机制,允许一个进程向另...
### 进程间通信之管道通信 #### 一、引言 在现代操作系统中,进程间的通信(IPC)是一项至关重要的技术,它使得不同进程能够相互通信与协作,完成复杂的任务。管道作为一种简单而有效的IPC机制,在Unix及类Unix...
在本实验“进程的管道通信实验”中,我们将深入理解并实践这一概念,尤其是管道(Pipe)这种简单的IPC机制。管道通信是早期Unix系统中引入的一种半双工通信方式,它允许数据在一个方向上流动,即数据只能从一个进程...
这个示例程序展示了如何使用匿名管道进行基本的进程间通信。在实际应用中,可能需要根据具体需求进行更复杂的同步控制,例如使用信号量、条件变量等同步原语。了解并掌握匿名管道是理解和实现更复杂IPC机制的基础,...