C語言 作業系統學習筆記 管道通訊

2021-07-06 08:25:12 字數 1754 閱讀 2866

管道通訊

管道: —

就像現實中的水管,水就像資料。 —

管道是一種半雙工的通訊方式 —

資料只能單向流動,而且只能在具有共同祖先的程序間使用。

所謂半雙工的模式(以下是我的理解):

形象來說類似乙個單刀雙擲開關,有兩個選擇,但是二者是互斥的,當選擇了一方另一方就失效。

而對於此處的管道,可以把它想成是管道的一端,一次只能呼叫一種功能讀入或者寫入,二者也是互斥的。

同時對應的fd[0]與fd[1]其實是乙個類似乙個臨界區的資源,一次只能由乙個程序使用一種功能,所以使用時要注意分配讀和寫的功能。

函式介紹:¢

intread(

intfd

, void *

buf,

intcount); —

功能:從引數

fd指定的讀端讀取管道資料到大小為

count

的快取buf

中,返回實際讀取到的位元組數。 —

引數 ¢fd

:管道讀端 ¢

buf:

快取區,儲存讀到的資料 ¢

count:

讀取位元組數

•int

write(

intfd

, void

*buf

, int

count);

•功能:向

引數fd

指定的寫端從快取

buf中取出

count

個位元組到管道中,

返回值為實際寫入的位元組數。

•引數 •

fd:管道寫端 •

buf:

快取區,將要寫入管道的資料 •

count:

寫入的位元組數

以下是乙個小的實驗:

父程序建立管道和兩個子程序p1和

p2 ¢2.

子程序p1

開啟給定檔案(如果沒有,則建立檔案),並向檔案中寫資料,寫完關閉檔案,然後向管道寫入一條訊息「

ok",目的是通知程序

p2可以讀取檔案內容了。 ¢

3.子程序

p2通過管道讀取訊息,如果訊息是「

ok」,

則開啟檔案,讀取檔案內容,並將其輸出到螢幕上

,關閉檔案.

實現原始碼:

//@athor:ruihong yao

//@date:2015/10/31

//using a pipe to send message between two processes

#include #include #include #include #include #include int main()

else

}else if(pid>0)

close(w_fd);

//get the message

read(r_fd,buffer,sizeof(buffer));

if(buffer[0]=='o'&&buffer[1]=='k')

} fclose(file2);

} else

wait(0);

return 0;

}

作業系統學習筆記 程序通訊

程序通訊是指程序之間的資訊交換。交換的資訊量包括乙個狀態或數值 訊號量,低階通訊 或上千個位元組 高階通訊 低階通訊 程序的互斥和同步 交換的資訊量 即訊號量 較少 高階通訊 指使用者可直接利用os提供的一組通訊命令 不需要自己編寫命令 高效地傳送大量資料的一種通訊方式。對使用者透明。使用者不需要考...

作業系統學習筆記

這裡專門摘錄作業系統相關筆試題和面試題!也當作自己的乙個複習!乙個很全的作業系統常考知識集合 1.分段式儲存和分頁式儲存,以及段頁式儲存的區別 分頁是一維儲存,分段是二維的 因為分頁給出虛擬位址後,作業系統會自動劃分頁號和偏移量 而分段給出位址後,需要知道段號和偏移量,段的長度是可變的!故是二維的 ...

作業系統學習 筆記

單道批處理評價 資源利用率差 互動性差 等 多道批處理 w為了提高系統的利用率 出現多道批處理 多道 是指 某時刻 多個應用程式再主存中,按照某些原則去處理,逐個執行程式。批處理 使用者提交一批作業,首先存放再外存,排成乙個佇列,然後排程程式按一定的演算法去排程從該佇列 中選取佇列中的乙個或若干個作...