目的:了解程序間通訊的機制,實現程序的兩種通訊方式,多次執行,觀察結果,並對兩種通訊方式進行比較。
內容:利用系統提供的通訊系統呼叫,進行一種方式的程序通訊的程式設計,並對結果進行分析,同時了解另一種通訊方式,將兩種方式進行比較分析。
(1)訊息的建立傳送和接收
使用系統呼叫msgget()、msgsnd()、msgrev()、msgctl()來編寫長度為500位元組的傳送和接收程式。用乙個程式先後建立兩個子程序server和client,進行訊息佇列方式通訊。由server建立訊息佇列,等待其他程序發來訊息,當遇到型別為1的訊息,則作為通訊結束的訊號,取消訊息佇列,退出。server每接收到乙個訊息顯示在螢幕上。
client判斷乙個資料中的整數是否為素數,然後使用server建立的訊息佇列,將某數是否為素數的訊息依次傳送給server,然後退出。client每次傳送時把訊息顯示在螢幕上。
(2)共享儲存區的建立,附接和斷接
使用系統呼叫shmget(),shmat(),shmctl()編寫乙個與上面(1)中相同功能的程式。
(說明:以上函式是linux系統下,如果windows系統下實現也可以,將函式換為windows下相關函式即可)
報告要求:
(1)仔細觀察設計中的各種現象及出現的問題。分析產生各種現象的原因。尋找解決問題的辦法。
(2)報告應至少包括帶注釋的程式清單、輸出的結果及對各種現象的分析意見。
#include
#include
#include
#include
#include
#include
#include
#include
#define max_text 500
struct msg_st
;void
isprm
(char nums,
int n)
}else
else}}
}void
msgreceive()
while(1
)printf
("you wrote:%s\n"
, data.text)
;isprm
(data.text, max_text);if
(strncmp
(data.text,
"1",1)
==0&&(
strlen
(data.text)-1
)==1)
}if(msgctl
(msgid, ipc_rmid,0)
==-1)
exit
(exit_success);}
void
msgsend()
while(1
)if(strncmp
(buffer,
"1",1)
==0&&(
strlen
(buffer)-1
)==1)
sleep(1
);}}
intmain
(int argc,
char
**ar**)
if(pid==
0&&i==1)
if(pid==-1
)}if(i==0)
else
if(i==1)
else
if(i==2)
return0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#define text_sz 500
struct shared_use_st
;void
isprm
(char nums,
int n)
}else
else}}
}void
shmread()
shm =
shmat
(shmid,0,
0);if
(shm ==
(void*)
-1)printf
("\nmemory attached at %x\n",(
int)shm)
; shared =
(struct shared_use_at*
)shm;
shared->written =0;
while(1
)}else}if
(shmdt
(shm)==-
1)if(
shmctl
(shmid,ipc_rmid,0)
==-1)
exit
(exit_success);}
void
shmwrite()
shm =
shmat
(shmid,
(void*)
0,0)
;if(shm ==
(void*)
-1)printf
("memory attched at %x\n",(
int)shm)
; shared =
(struct shared_use_st *
)shm;
while(1
)printf
("enter some text:");
fgets
(buffer,bufsiz,
stdin);
strncpy
(shared->text,buffer,text_sz)
; shared->written =1;
if(strncmp
(buffer,
"1",1)
==0&&(
strlen
(buffer)-1
)==1)
}if(shmdt
(shm)==-
1)sleep(1
);exit
(exit_success);}
intmain()
if(pid==
0&&i==1)
if(pid==-1
)}if(i==0)
else
if(i==1)
else
if(i==2)
return0;
}
作業系統 程序間通訊
程序間通訊涉及到3個問題 1.乙個程序如何把資訊傳遞給另乙個程序 2.確保兩個或多個程序之間不會在關鍵活動中出現交叉 3.程序間執行的順序對執行結果的影響。注意 確保程序對臨界區的 互斥 訪問。忙等待的互斥 1.遮蔽中斷 當乙個程序進入臨界區後立即遮蔽所有中斷,時鐘中斷也被遮蔽 這樣cpu就不會進行...
作業系統 程序間通訊
include include include include include include ifndef semun h 條件編譯,即若semun在標頭檔案中沒有被定義,就進行下面的編譯 define semun h union semun endif static int set semval...
作業系統 程序間通訊
程序間通訊方式總結 優缺點 linus下的程序通訊手段基本上是從unix平台上的程序通訊手段繼承而來的。1 無名管道通訊 半雙工通訊,只能在具有親緣關係的程序間使用 1 管道 2 高階管道通訊 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子 程序 3 有名管道通訊 半雙工通訊...