管道通訊
管道: —
就像現實中的水管,水就像資料。 —
管道是一種半雙工的通訊方式 —
資料只能單向流動,而且只能在具有共同祖先的程序間使用。
所謂半雙工的模式(以下是我的理解):
形象來說類似乙個單刀雙擲開關,有兩個選擇,但是二者是互斥的,當選擇了一方另一方就失效。
而對於此處的管道,可以把它想成是管道的一端,一次只能呼叫一種功能讀入或者寫入,二者也是互斥的。
同時對應的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為了提高系統的利用率 出現多道批處理 多道 是指 某時刻 多個應用程式再主存中,按照某些原則去處理,逐個執行程式。批處理 使用者提交一批作業,首先存放再外存,排成乙個佇列,然後排程程式按一定的演算法去排程從該佇列 中選取佇列中的乙個或若干個作...