#!/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)
endend
wr.close
p "write pipe closed."
endprocess.fork do
sl = ""
loop do
case rd.ready?
when fixnum
p "parent got: <#>"
when true,false,nil
#false eq rd.eof?
begin
p "parent got: <#>"
#這裡用read方法的話會產生堵塞,
#用readpartial的話會不知道現有內容的長度。
rescue eoferror
(rd.close;exit(0)) if rd.eof?
endelse
#do nothing
endp time.now.to_s
endend
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之間的訊號可自定義,只是資料如何傳遞還要另想辦法。
C 中使用命名管道進行程序通訊的例項
原文 c 中使用命名管道進行程序通訊的例項 1 新建解決方案 namedpipeexample 在解決方案下面新建兩個專案 client 和server 兩者的輸出型別均為 windows 應用程式 整個程式的結構如下圖所示。2 實現專案 client client僅包含乙個名為 客戶端 的窗體,如...
用郵槽進行程序間通訊
這種程序間通訊的方式比較適用於在區域網環境內傳送和接收短訊息,也可在區域網內向所有計算機廣播訊息。用郵槽進行程序間通訊主要通過三個步驟來實現 建立郵槽伺服器,向郵槽傳送訊息和從郵槽中讀取訊息。下面筆者將用windows的api函式來完成這三個步驟。一 建立郵槽伺服器 以下 用於建立乙個名叫sampl...
程序通訊 程序管道
程序間通訊的幾種常用方式 管道 命名管道 訊號 訊號量 共享記憶體 訊息佇列 套接字。管道 pipe 一種半雙工的通訊方式,資料只能單向流動且只能在具有共同祖先的程序間使用。命名管道 name pipe 也是一種半雙工的通訊方式,但他允許不相關程序間的通訊。訊號 sinal 乙個程序通過訊號通知其他...