Linux系统编程实验六:进程间通信

上传人:公**** 文档编号:476835579 上传时间:2023-04-18 格式:DOC 页数:10 大小:167KB
返回 下载 相关 举报
Linux系统编程实验六:进程间通信_第1页
第1页 / 共10页
Linux系统编程实验六:进程间通信_第2页
第2页 / 共10页
Linux系统编程实验六:进程间通信_第3页
第3页 / 共10页
Linux系统编程实验六:进程间通信_第4页
第4页 / 共10页
Linux系统编程实验六:进程间通信_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《Linux系统编程实验六:进程间通信》由会员分享,可在线阅读,更多相关《Linux系统编程实验六:进程间通信(10页珍藏版)》请在金锄头文库上搜索。

1、word实验六:进程间通信l 实验目的:学会进程间通信方式:无名管道,有名管道,信号,消息队列,l 实验要求:一在父进程中创建一无名管道,并创建子进程来读该管道,父进程来写该管道二在进程中为SIGBUS注册处理函数,并向该进程发送SIGBUS信号三创建一消息队列,实现向队列中存放数据和读取数据l 实验器材:软件:安装了Linux的vmware虚拟机硬件:PC机一台l 实验步骤:一无名管道的使用#include #include #include #include #include #include int main()int pipe_fd2;/管道返回读写文件描述符pid_t pid;cha

2、r buf_r100;char* p_wbuf;int r_num;memset(buf_r,0,sizeof(buf_r);/将buf_r初始化char str1=parent write1 “holle;char str2=parent write2 “pipen; r_num=30;/*创建管道*/if(pipe(pipe_fd)0)printf(pipe create errorn);return -1;/*创建子进程*/if(pid=fork()=0) /子进程执行代码/1、子进程先关闭了管道的写端close(pipe_fd1);/2、让父进程先运行,这样父进程先写子进程才有容读sl

3、eep(2); /3、读取管道的读端,并输出数据if(read(pipe_fd0,buf_r, r_num)0) /父进程执行代码/1、父进程先关闭了管道的读端close(pipe_fd0); /2、向管道写入字符串数据p_wbuf=&str1;write(pipe_fd1,p_wbuf,sizof(p_wbuf);p_wbuf=&str2;write(pipe_fd1,p_wbuf,sizof(p_wbuf); /3、关闭写端,并等待子进程完毕后退出close(pipe_fd1);return 0;/*#include #include #include #include #include

4、#include int main()int pipe_fd2;/管道返回读写文件描述符pid_t pid;char buf_r100;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)printf(pipe create errorn);return -1;/*创建子进程*/if(pid=fork()=0) /子进程执行代码close(pipe_fd1);/1、子进程先关闭了管道的写端/2

5、、让父进程先运行,这样父进程先写子进程才有容读 /3、读取管道的读端,并输出数据if(read(pipe_fd0,buf_r, r_num)0)printf(read1 error!);exit(-1);printf(nparent write1 %s!,buf_r);sleep(1);if(read(pipe_fd0,buf_r, r_num)0) /父进程执行代码close(pipe_fd0);/1、父进程先关闭了管道的读端p_wbuf=str1;/2、向管道写入字符串数据write(pipe_fd1,p_wbuf,sizeof(str1);sleep(1);p_wbuf=str2;wri

6、te(pipe_fd1,p_wbuf,sizeof(str2);close(pipe_fd1);/3、关闭写端,并等待子进程完毕后退出exit(1);/printf(father error!);return 0;*/3、运行应用程序子进程先睡两秒让父进程先运行,父进程分两次写入“hello和“pipe,然后阻塞等待子进程退出,子进程醒来后读出管道里的容并打印到屏幕上再退出,父进程捕获到子进程退出后也退出4、由于fork函数让子进程完整地拷贝了父进程的整个地址空间,所以父子进程都有管道的读端和写端。我们往往希望父子进程中的一个进程写一个进程读,那么写的进程最后关掉读端,读的进程最好关闭掉写端二

7、信号处理#include #include #include /1、自定义信号处理函数,处理SIGBUS信号,打印捕捉到信号即可static void signal_handler(int signo)if(signo =SIGBUS)printf(“n I have get SIGBUS);exit(EXIT_FAILURE);int main()printf(Waiting for signal SIGBUS n );/2、注册信号处理函数if(signal(SIGBUS,signal_handler)=SIG_ERR)fprintf(stderr,cannot handle SIGBUS

8、n);exit(EXIT_FAILURE);pause();/将进程挂起直到捕捉到信号为止exit(0);return 0;/*#include #include #include #include /1、自定义信号处理函数,处理SIGBUS信号,打印捕捉到信号即可static void signal_handler(int signo)if(signo =SIGBUS)printf(I have get SIGBUS);exit(EXIT_FAILURE);int main()printf(Waiting for signal SIGBUS n );/2、注册信号处理函数if(signal(

9、SIGBUS,signal_handler)=SIG_ERR)fprintf(stderr,cannot handle SIGBUSn);exit(EXIT_FAILURE);pause();/将进程挂起直到捕捉到信号为止exit(0);return 0;*/用signal系统调用为SIGBUS信号注册信号处理函数my_func,然后将进程挂起等待SIGBUS信号。所以需要向该进程发送SIGBUS信号才会执行自定义的信号处理函数3、运行应用程序先先一个终端中运行sig_bus,会看到进程挂起,等待信号然后在另一个终端中,查找到运行sig_bus这个产生的进程号,用kill命令发送SIGBUS信

10、号给这个进程我们可以看到前面挂起的进程在接收到这个信号后的处理用自定义信号处理函数my_func来处理,所以打印了I have get SIGBUS这样一句话l 上机报告要求:1、 总结pipe(),signal()的函数定义原型,返回值和参数的意义表头文件: #include定义函数: int pipe(int filedes2);函数说明参数: pipe()会建立管道,并将文件描述词由参数filedes数组返回。filedes0为管道里的读取端,filedes1如此为管道的写入端。返回值:假设成功如此返回零,否如此返回-1,错误原因存于errno中。阻塞问题:当管道中的数据被读取后,管道为

11、空。一个随后的read()调用将默认的被阻塞,等待某些数据写入。功能:管道是一种把两个进程之间的标准输入和标准输出连接起来的机制,从而提供一种让多个进程间通信的方法,当进程创建管道时,每次都需要提供两个文件描述符来操作管道。其中一个对管道进展写操作,另一个对管道进展读操作。对管道的读写与一般的IO系统函数一致,使用write()函数写入数据,使用read()读出数据。表头文件:#include功 能:设置某一信号的对应动作函数原型:void (*signal(int signum,void(* handler)(int)(int); 或者:typedef void(*sig_t) ( int

12、); sig_t signal(int signum,sig_t handler);可看成是signal()函数它自己是带有两个参数,一个为整型,一个为函数指针的函数,而这个signal()函数的返回值也为一个函数指针,这个函数指针指向一个带整型参数,并且返回值为void的一个函数。参数说明:第一个参数signum指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。 第二个参数handler描述了与信号关联的动作,它可以取以下三种值: 1一个返回值为正数的函数地址此函数必须在signal()被调用前申明,handler中为这个函数的名字。当接收到一个类型为sig的信号时,就执行handler 所指定的函数。这个函数应有如下形式的定义: intfunc(int sig); sig是传递给它的唯一参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号