作業系統實驗(15 16)匿名管道與命名管道通訊

2021-10-11 20:03:29 字數 2136 閱讀 6255

#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編譯器。三 實驗內容 寫出主要的內容 首先用合法使用者登入系統...