c语言的消息系统,linux中的c语言编程消息传递系统.doc

linux中的c语言编程消息传递系统.doc

操作系统第五次实验

张焓

实验名称:

项FH消息队列通信

实验目的:

服务进程奴有一个,接收个客户进程以消息形式发出的14题,接收键盘输入作为回答, 再以消息形式送给提问的程序。

各客户进程接收键盘输入作为问题,以消息形式发给服务进程,等待接收服务进程发来 的回答消息,再开始下-?轮的循环。

程序不停执行,直到用户川ctrl+c杀死进程

程序不停执行,过到用户键入end,进程结朿执行

实验方法

(1>首先编写客广进程:妲含需要用到的头文件,并定义结构体msgform作为报文结构

用于存放报文:

^include

#include

^include

#lnclude

#include

struct msgform

"long ntype; char ntext[256];

};

作一些定义及声明:

tnt nain()

{

struct nsgforn nsg; tnt runnlng=l;

Int pid;

tnt nsgqid=-1,reval=-1; char buffer[256];

创建消息队列,并添加必要的错误处理,标识码1234:

nsgqld=nsgget((key_t)1234,0666|IPC_CREAT); if(nsgqid==-l)

{

printf(Mnsg create error!!\n"); exU(EXIT-FAILURE);

}

接收消息队列中的报文,添加必要的错误处理,并在屏幕打印接收到的报文消息, 为了方便观察,我们在这甩顺带显示一下进程的pid。另外,在a情况下此段程序如阁,在 b情况卜,将 部分的 符去掉即可:

pid=getpid(); nsg.ntype = 0; while(running)

If(nsgrcv(nsgqid > &nsg,256,ife)==-l)

{

prlntf("client:nsg receive error!!\nM); extt(EXIT-FAILURE);

}

prlntf("client:receive fron pid Xd you write:Xs\nM,pld,nsg.ntext);

//if(strncnp(nsg.ntextf ”end”, 3) == 0)

//running =6;

}

清空并删除消息队列,并且添加必要的错误处理:

Iif(nsgctl(nsgqid,IPC_RMID,0)==-1)

prlntf(Mnsgctl failed\nM); exit(EXIT^FAILURE);

I }

如整个程序正常运行,则退出进程:

extt(EXIT_SUCCESS);

,

编写服务进程:包含需耍用到的尖文件,并定义结构体msgform作为报文结构用于

存放报文(同⑴):

#include

^Include

#tnclude

井include

#tnclude|

struct nsgforn

{

long ntype; char ntext[256];

};

⑻在服务进程中启动客户进程:

int nain()

{

int child;

If((child=fork())==0)

{

execlp(H./clientM,(char*) 6);

}

作一些定义及声明:

struct nsgforn nsg; int running=l; int pld;

int nsgqld=-1f reval=-1; char buffer[256];

创建消息队列,并添加必要的错误处理,标识码1234:

nsgqld=nsgget((key^t)1234,0666 丨IPC^CREAT); if(nsgqid==-l)

{

printf(wnsg create error!!\n"); extt(EXIT FAILURE);

} '

从键盘输入一组字符串,存入临吋的字符串数组作为报文内容,并定义报文类型。 为方便观察,在屏幕打印服务进程接收到的信总的报文消思,为了方便观察,我们在这里顺 带显示一下进程的pid:

pid=getpid();

nsg.ntype=0;

while(runnlng)

{

printf(wenter:w);

fgets(Guffer\2S6,st(Hn);

prtntf(Hserver:receive ftor pid Xd you write:Xs\nM,pidfbuffer);

strcpyCnsg.ntext,buffer);

nsg.ntype=l;

将报文写入到消息队列中的,添加必耍的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值