`
CharlesCui
  • 浏览: 427579 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我想用管道进行进程通信

阅读更多
#!/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之间的信号可自定义,只是数据如何传递还要另想办法。
分享到:
评论

相关推荐

    2.4 实验四:使用命名管道实现进程通信.doc

    命名管道是Windows系统提供的一种进程通信机制,通过使用命名管道,两个进程可以进行通信。在本实验中,我们将使用命名管道实现两个进程之间的通信,并介绍相关的API和操作步骤。 一、实验目的: 1. 了解 Windows ...

    使用匿名管道实现进程通信

    如果需要更复杂的通信,如双向通信或跨进程通信,可以考虑使用命名管道(命名管道在文件系统中有路径,可以被任何知道路径的进程访问)、套接字(Socket)或其他更高级的IPC机制。 通过熟练掌握匿名管道的使用,...

    进程的软中断通信和管道通信

    在实验中,我们编写一个程序,使用系统调用 fork 生成 3 个子进程,并使用系统调用 pipe 创建一个管道,使得这 3 个子进程和父进程共用同一个管道进行通信。 在实验中,我们使用了多种系统调用,包括 fork()、pipe...

    进程的管道通信编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2

    编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2 分别向管道各写一句话: Child1 is sending a message! Child2 is sending a message! 而父进程则从管道中读出来自于...

    实验一 进程通信——管道和信号实验报告.doc

    本次实验是关于操作系统中的进程通信,主要涉及了进程的创建、控制、以及多种通信方式,包括信号通信和管道通信。通过实验,目的是加深对进程概念的理解,掌握并发执行的本质,并学习如何解决进程间的互斥问题。实验...

    操作系统实验四 进程的管道通信 实验报告

    总结起来,这个实验加深了对操作系统中进程通信的理解,尤其是管道通信的概念。通过实践,我们学习了如何创建管道、读写管道以及如何在父子进程中协调通信。这对于理解和开发多进程应用程序,特别是在需要进程间数据...

    实验四:Linux下进程管道通信.docx

    管道是一种特殊类型的文件,它允许相关进程之间进行单向通信。在这个实验中,我们关注三个具体任务。 ### 任务1 这个任务涉及创建一个父子进程的通信链路。首先,父进程调用pipe()系统调用来创建管道,然后fork()...

    进程的管道通信

    【进程的管道通信】知识点详解 ...通过这个实验,可以深入理解进程的概念,进程通信的机制,以及在Linux系统中如何实现这些功能。这不仅有助于理解操作系统的基本原理,也为编写多进程应用程序打下了基础。

    管道机制实现进程间的通信

    本实验旨在通过实践操作,帮助学习者深入理解管道的工作原理及其应用,并掌握如何使用管道来实现进程间的简单通信。 #### 实验内容 ##### 1. 了解系统调用`pipe()`的功能和实际原理 在Linux系统中,`pipe()`是一...

    C# 使用管道Pipe在进程间通信

    进程间通信的一种方式,Pipes:管道,分为无名管道:在父子进程间交换数据;有名管道:可在不同主机间交换数据,分为服务器方和客户方,在Win9X下只支持有名管道客户。 1、进程间通信 2、管道Pipe通信

    进程控制 进程的管道通信

    使用系统调用pipe()建立一个管道,两个子进程分别向管道写信息,父进程则从管道读出来自子进程的信息,显示在屏幕上,记录屏幕的显示结果,分析原因。 任务 编制一段程序,实现进程的管道通信。使用系统调用pipe()...

    进程通信——管道通信

    命名管道在Windows操作系统中被广泛使用,特别是在需要跨进程通信的场景下。它们提供了比无名管道更强大的功能,如双向通信和安全性控制。在MFC中实现命名管道,我们需要利用MFC的CNamedPipe类。这个类封装了Windows...

    进程的管道通信 进程管理

    使用系统调用pipe()建立一个管道,两个子进程分别向管道写信息,父进程则从管道读出来自子进程的信息,显示在屏幕上,记录屏幕的显示结果,分析原因。 任务 编制一段程序,实现进程的管道通信。使用系统调用pipe()...

    命名管道双管道跨进程通信多线程封装

    在本案例中,"命名管道双管道跨进程通信多线程封装"着重讲解了如何利用命名管道来实现跨进程的数据传输,并且考虑到了多线程环境下的封装和效率优化。 首先,我们要理解命名管道的基本概念。命名管道是一种半双工...

    QT进程多个管道通信,并与C#客户端同时多个通信

    总之,通过理解和应用QT的命名管道机制,开发者可以构建出高效、可扩展的多进程通信系统,同时能够与其他语言的应用(如C#)无缝对接,提升系统的整体性能和灵活性。在设计这样的系统时,应充分考虑并发控制、数据...

    实验 Linux进程通信的参考答案

    Linux 进程通信是指在操作系统中,多个进程之间进行数据交换和同步的机制。在 Linux 中,进程通信可以通过信号、管道和共享内存等方式实现。 一、信号机制 在 Linux 中,信号是一种异步通信机制,允许一个进程向另...

    进程间通信之管道通信

    ### 进程间通信之管道通信 #### 一、引言 在现代操作系统中,进程间的通信(IPC)是一项至关重要的技术,它使得不同进程能够相互通信与协作,完成复杂的任务。管道作为一种简单而有效的IPC机制,在Unix及类Unix...

    进程的管道通信实验 操作系统

    在本实验“进程的管道通信实验”中,我们将深入理解并实践这一概念,尤其是管道(Pipe)这种简单的IPC机制。管道通信是早期Unix系统中引入的一种半双工通信方式,它允许数据在一个方向上流动,即数据只能从一个进程...

    匿名管道实现进程间通信示例程序

    这个示例程序展示了如何使用匿名管道进行基本的进程间通信。在实际应用中,可能需要根据具体需求进行更复杂的同步控制,例如使用信号量、条件变量等同步原语。了解并掌握匿名管道是理解和实现更复杂IPC机制的基础,...

Global site tag (gtag.js) - Google Analytics