#include
#include
#include
#include
#include
intmain()
printf
("pipe create success\n");
if(fork()
>0)
else
close
(pipe_fd[0]
);close
(pipe_fd[1]
);return0;
}
分析:
父程序通過pipe()呼叫申請建立第三方緩衝區並獲得了該記憶體區域的讀寫端位址,在呼叫fork後,會將讀寫的端位址複製給子程序。父子程序產生後,子程序執行向管道寫入資料,父程序從管道讀出資料,從而完成一次父子程序的通訊。
在子程序中加入了sleep語句,所以子程序的執行會產生休眠,從而向管道寫入資料要需要等待。此時父程序由於沒有從管道中獲得資料,也會處於等待狀態,等子程序啟動後,管道才使得父子程序之間可以通訊。
讀程序
#include
#include
#include
#include
#include
#include
#include
#include
intmain
(int argc,
char
* ar**)
char
* pipefile;
pipefile = ar**[1]
;char buf[
100]
;int fd, i;
printf
("read open namedpipe \n");
fd =
open
(pipefile, o_rdonly,0)
;if(fd <0)
printf
("ok,namedpipe opened for read \n");
i =read
(fd, buf,
100)
; buf[i]=0
;printf
("ok,readed from namedpipe: %s \n"
, buf)
;return0;
}
寫程序#include
#include
#include
#include
#include
#include
#include
#include
intmain
(int argc,
char
* ar**)
char
* pipefile;
pipefile = ar**[1]
;char buf[
100]
;int fd;
char
* teststr =
"i am your name \n"
;printf
("open namedpipe -- %s for write \n"
, pipefile)
; fd =
open
(pipefile, o_wronly,0)
;printf
("ok,namedpipe -- %s opened for write \n"
, pipefile)
;sleep(5
);write
(fd, teststr,
strlen
(teststr));
printf
("ok,namedpipe write successfully \n");
exit(0
);return0;
}
分析:
首先進行讀程序,剛開始讀就產生了阻塞,因為管道的規則需要兩方同時存在的時候才可以向下訪問,寫端還沒有執行,所以讀端阻塞了。
執行寫入端,開始執行後由於存在sleep語句睡眠5秒,等5秒結束後管道兩邊同時存在讀寫程序,兩個無親緣關係的程序直接完成了一次通訊。
作業系統實驗四 管道通訊
一 實驗名稱 二 實驗目標 學習如何利用管道機制 訊息緩衝佇列 共享儲存區機制進行程序間的通訊,並加深對上述通訊機制的理解。三 實驗要求 編寫一c語言程式,使其用管道來實現父子程序間通訊。子程序向父程序傳送字串 is sending a message to parent 父程序則從管道中讀出子程序...
作業系統第3次實驗 命名管道
include include include include include include include int main 迴圈寫入內容 while 1 close fd return 0 建立程序對管道進行寫fifo read.c,如下 include include include inc...
作業系統實驗
一 實驗目的 理解vi的三種執行模式及其切方法。學會使用vi的各種操作命令進行文字檔案的編輯。用vi編寫linux下c程式,會用gcc編譯。二 實驗環境 一台裝有linux的機器 這裡預設是red hat linux 9 系統裡面有gcc編譯器。三 實驗內容 寫出主要的內容 首先用合法使用者登入系統...