教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

操作系统进程通信管理

来源:网络收集 时间:2026-08-02
导读: 实验四进程间通信实验 (一)实验学时:4学时 (二)实验类型:验证 (三)实验目的: 了解Linux支持的消息通讯机制及信息量机制 (四)实验内容: 消息的创建,发送和接收。 ①使用系统调用msgget ( ), msgsnd ( ), msgrev ( ), 及msgctl ( ) 编制一长度为1

实验四进程间通信实验

(一)实验学时:4学时

(二)实验类型:验证

(三)实验目的:

了解Linux支持的消息通讯机制及信息量机制

(四)实验内容:

消息的创建,发送和接收。

①使用系统调用msgget ( ), msgsnd ( ), msgrev ( ), 及msgctl ( ) 编制一长度为1k的消息的发送和接收程序。

②观察分析程序,说明控制消息队列系统调用msgctl ( ) 在此起什么作用?

共享存储区的创建、附接和段接。

使用系统调用shmget( ),shmat( ),sgmdt( ),shmctl( ),编制一个与上述功能相同的程序。

#include<stdio.h>

#include<sys/type.h>

#include<sys/msg.h>

#include<sys/ipc.h>

#define MSGEKEY 75 /*定义关键词MSGEKEY */

struct msgform /*消息结构*/

{

long mtype;

Char mtex[100];/*文本长度*/

}msg;

int msgqid,i;

void CLIENT()

{

int i;

Msgqid=magget(MSGKEY,0777|IPC_CREAT);

for (i=10;i>=1;i--)

{

mag.mtype=i;

Printf((“client”)sent\n);

magsnd(magqid,&mag,1030,0);/*发送消息msg入msgid消息队列*/

}

exit(0);

}

void SERVER()

{

msgqid=magget(MSGKEY,0777|IPC_CRVEAT);/*有关键字获得消息队列*/

do

{msgrcv(msgqid,&msg,1030,0,0);

printf(“server)receive\n”);

}

while(msg.,mytype!=1);

msgctl(msgqid,IPC_RMID,0);

}

main()

{

if (fork())

{

SERVER();

wait(0);

}

else CLIENT();

}

实验结果

从理想实验结果来说,应当每一个Client发送一个消息后,Server接收该消息,Client 再发送下一条消息,也就是说“(Client)sent”和“(Serve)received”的字样应该在屏幕上交替出现。实际上结果是由Client先发送10条消息,然后erver接收10条消息,与预期的结果不同。

《实验分析》

Message的传送与控制并不保证完全同步,当一个程序不在激活的状态的时候,它完全可以继续睡眠,造成上面现象,在多次sendmessage后才receive message。这一点有助于理解消息转送的实现机理。

②调用msgctl ( )删除队列,并清除队列中的所有消息,归还资料。

《程序》

#include<sys/type.h>

#include<sys/msg.h>

#include<sys/ipc.h>

#define MSGEKEY 75 /*定义共享区关键词MSGEKEY */

int shmid,i;

int *addr;

CLIENT()

{

int ;

shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);

addr=shmat(shmid,0,0);

for(i=9;i>=0;i--)

{

while(*addr!=-1);

Printf(“(client)sentin”);

*addr=i;

}

exit(0);

}

SERVER()

{

do

{

while(*addr==-1)’

printf(“(server)received\n%d,”a*ddr);

if(*adr!==0)

*addr=-1;

}while(*addr);

wait(0);

shmctl(shmid,IP_RMID,0);

}

main()

{

shmid=shmget(SHMKEY,1024,0777|IPC_CREAT); addr=shmat(shmid,0,0);

*addr=-1;

if(fork())

{

SERVER();

}

Else

{

CLIENT();

}

}

操作系统进程通信管理.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/108580.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)