1
五、程序代码
实验1消息队列 /* msg_client.c */
#include
long mtype; char mtext[256]; }
main() {
struct msgform msg;
int msgqid,pid,*pint; /* 文件主 同组用户 其他用户 rwxrwxrwx */ msgqid=msgget(MSGKEY,0777); /* rw-rw-rw- */ pid=getpid();
pint=(int*)msg.mtext; *pint=pid; msg.mtype=1;
msgsnd(msgqid,&msg,sizeof(int),0); msgrcv(msgqid,&msg,256,pid,0);
printf(\}
/* msg_server.c */ #include
char mtext[256];}msg; int msgqid; main() {
int i,pid,*pint; extern cleanup(); for (i=0;i<20;i++) signal(i,cleanup);
msgqid=msgget(MSGKEY, 0777|IPC_CREAT); for (;;)
{ msgrcv(msgqid,&msg, 256,1,0);
1
pint=(int*)msg.mtext; pid=*pint;
printf(\ msg.mtype=pid; *pint=getpid();
msgsnd(msgqid,&msg, sizeof(int),0);}} cleanup() {
msgctl(msgqid,IPC_RMID,0); exit(0); }
实验2共享内存 #include
int i, * pint; char * addr;
extern char * shmat();
shmid = shmget(SHMKEY, 8 * K, 0777); addr = shmat (shmid,0,0); pint = (int *)addr; while ( * pint==0 )
for (i=0; i<256; *pint++) printf(\}
#include
int i, * pint; char * addr;
extern char * shmat();
1
extern cleanup(); for(i=0; i<20; i++) sinal (i, cleanup);
shmid = shmget (SHMKEY, 16 * K, 0777|IPC_CREAT); addr = shmat (shmid,0,0); printf(\ pint = (int *)addr; for(i=0; i<256; i++) *pint++ =i; pint = (int *)addr; *pint = 256; pause(); }
cleanup() {
shmctl (shmid, IPC_RMID, 0); exit(0); }
六、程序运行结果及分析
实验1消息队列运行结果截图 客户端:
服务器端:
1
实验1消息队列结果分析
服务端程序监听软中断,建立消息队列,循环在队列中接收类型为1的消息,每接收一个消息向队列中增加一个类型为客户进程ID的消息。当发生软中断时,删除消息队列。
客户端进程创建和服务端相同的消息队列,并向消息队列中发送类型为1的消息,然后接收类型为客户进程ID的消息。 实验后思考:
对消息队列的运行情况有所了解,但关于内存共享部分尚需仔细研究。
1
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作系统原理实验报告(3)在线全文阅读。
相关推荐: