合肥师范学院操作系统实验项目四

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验项目四进程通信

一、实验目的

1.了解什么是消息,熟悉消息传送原理。

2.了解和熟悉共享存储机制。

3.掌握消息的发送与接收的实现方法。

二、实验内容

1.根据消息传送机理,使用系统调用msgget( ), msgsnd( ),

msgrev( ), 及msgctl( )编制一长度为1k的消息发送和接收的

程序,要求在程序中完成10次消息的发送和接收,每次发送

消息结束和接收消息结束都需给出相应的屏幕提示,且每次

发送的的内容不少于一个字符,并能在接收端输出。

2.根据共享存储区原理,使用系统调用shmget( ), shmat( ),

shmdt( ), 及shctl( )编制程序,要求创建一个长度为1k的共

享存储区,并完成10次数据的发送和接收,每次发送数据结

束和接收数据结束都需给出相应的屏幕提示,且每次发送的

的数据应能在接收端输出。

三、源程序及运行结果

1、源程序:

//server_ex.c 接收端

#include

#include

#include

#include

#include

#define MSGKEY 75

struct msgform

{

long mtype;

char mtext[1024];

}msg;

int msgqid;

void server( )

{

msgqid=msgget(MSGKEY,0777|IPC_CREAT); /*创建75#消息队列*/ do

{

msgrcv(msgqid,&msg,1024,0,0); /*接收消息*/

printf("%d ",msg.mtext[0]);

printf("(server)received\n");

//sleep(1);

}

while(msg.mtype!=10);

//sleep(1);

msgctl(msgqid,IPC_RMID,0); /*删除消息队列,归还资源*/ exit(0);

}

int main( )

{ server( );

}

//client_ex.c 发送端

#include

#include

#include

#include

#include

#define MSGKEY 75

struct msgform

{

long mtype;

char mtext[1024];

}msg;

int msgqid;

int i;

void client()

{ msgqid=msgget(MSGKEY,0777); /*打开75#消息队列*/ for(i=0;i<=9;i++)

{

msg.mtype=i+1;

msg.mtext[0]=i;

printf("(client)sent\n");

msgsnd(msgqid,&msg,1024,0); /*发送消息*/

sleep(1);

}

exit(0);

}

int main( )

{ client( );

}

运行结果:截图

2.源程序:

//server_ex.c 接收端

#include

#include

#define SHMKEY 75

int shmid,i;

int *addr;

void server( )

{ shmid=shmget(SHMKEY,1024,0777|IPC_CREAT); /*创建共享存储区*/

addr=shmat(shmid,0,0); /*获取首地址*/

do{ *addr=-1;

while (*addr==-1);

printf("%d",*addr);

printf(" (server) received\n");

}while (*addr!=0);

shmctl(shmid,IPC_RMID,0); /*撤消共享存储区,归还资源*/

exit(0);

}

int main( )

{ server( );

}

//client_ex.c 发送端

#include

#include

#include

#include

#include

#define SHMKEY 75

#define NUM 10

int shmid,i;

int *addr;

void client( )

{ int i;

for(i=1;i<=NUM+1;i++){

shmid=shmget(SHMKEY,1024,0777); /*打开共享存储区*/ addr=shmat(shmid,0,0); /*获得共享存储区首地址*/ while (*addr!=-1);

printf("(client) sent\n");

*addr=i;

}

*addr=0;

exit(0);

}

int main( )

{ client( );

}

运行结果:(截图)

相关文档
最新文档