linux进程间通信实验报告6,Linux系统编程实验六:进程间通信.docx

实验六:进程间通信

实验目的:

学会进程间通信方式:无名管道,有名管道,信号,消息队列,

实验要求:

在父进程中创建一无名管道,并创建子进程来读该管道,父进程来写该管道

在进程中为 SIGBUS注册处理函数,并向该进程发送SIGBUS信号

创建一消息队列,实现向队列中存放数据和读取数据

实验器材:

软件:安装了 Linux的vmware虚拟机

硬件:PC机一台

实验步骤:

(一)无名管道的使用

1编写实验代码 pipe rw.c

#in elude

#in elude

#in elude

#i nclude

#in elude

#i nclude

int mai n()

{

int pipe_fd[2];〃管道返回读写文件描述符

pid_t pid;

char buf_r[100];

char* p_wbuf;

int r_num;

memset(buf_r,0,sizeof(buf_r));〃 将 buf_r 初始化

char str1[]= "parent writel holle ” ”

char str2[]= "parent write2 pipe”n”

r_num=30;

/*创建管道*/

if(pipe(pipe_fd)<0)

{

prin tf("pipe create error'n ”);

return -1;

}

/*创建子进程*/

if((pid=fork())==0)〃子进程执行代码

{

〃1、子进程先关闭了管道的写端

close(pipe_fd[1]);

〃2、让父进程先运行,这样父进程先写子进程才有内容读

sleep(2);

〃3、读取管道的读端,并输出数据

if(read(pipe_fd[O],buf_r, r_num)<0)

{

printf( read error!");

exit(-1);

}

printf( %s\n",buf_r);

〃4、关闭管道的读端,并退出

close(pipe_fd[1]);

}

else if(pid>0) //父进程执行代码

{

〃1、父进程先关闭了管道的读端

close(pipe_fd[0]);

〃2、向管道写入字符串数据

p_wbuf= &str1;

write(pipe_fd[1],p_wbuf,sizof(p_wbuf));

p_wbuf= &str2; write(pipe_fd[1],p_wbuf,sizof(p_wbuf));

〃3、关闭写端,并等待子进程结束后退出

close(pipe_fd[1]);

}

return 0;

}

/***********************

#in clude

#in clude

#in clude

#i nclude

#in clude

#i nclude

int mai n()

{

int pipe_fd[2];//管道返回读写文件描述符

pid_t pid;

char buf_r[100];

char* p_wbuf;

int r num;

memset(buf_r,0,sizeof(buf_r));〃 将 buf_r 初始化

char str1[]="holle";

char str2[]="pipe";

r_num=10;

/*创建管道*/

if(pipe(pipe_fd)<0)

{

prin tf("pipe create error'n ”); return -1;

}

/*创建子进程*/

if((pid=fork())==0)〃子进程执行代码

{

close(pipe_fd[1]);//1、子进程先关闭了管道的写端

〃2、让父进程先运行,这样父进程先写子进程才有内容读

〃3、读取管道的读端,并输出数据

if(read(pipe_fd[0],buf_r, r_n um)<0)

{

prin tf("read1 error!");

exit(-1);

}

prin tf("\npare nt write1 %s!",buf_r);

sleep(1);

if(read(pipe_fd[0],buf_r, r_n um)<0)

{

prin tf("read2 error!");

exit(-1);

}

prin tf("\npare nt write2 %s!",buf_r);

close(pipe_fd[1]);//4、关闭管道的读端,并退出

exit(1);

//prin tf("child error!");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值