admin 管理员组文章数量: 887021
2024年1月14日发(作者:work的词根)
Linux进程通信实验报告
一、 实验目的和要求
1. 进一步了解对进程控制的系统调用方法。
2. 通过进程通信设计达到了解UNIX或Linux系统中进程通信的基本原理。
二、 实验内容和原理
1. 实验编程,编写程序实现进程的管道通信(设定程序名为pipe.c)。使用系统调用pipe()建立一条管道线。而父进程从则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接受子进程P1发来的消息,然后再接受子进程P2发来的消息。
2. 可选实验,编制一段程序,使其实现进程的软中断通信(设定程序名为softint.c)。使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键),当父进程接受这两个软中断的其中一个后,父进程用系统调用kill()向两个子进程分别发送整数值为16和17的软中断信号,子进程获得对应软中断信号后分别输出相应信息后终止。
三、 实验环境
一台安装了Red Hat Linux 9操作系统的计算机。
四、 实验操作方法和步骤
进入Linux操作系统,利用vi编辑器将程序源代码输入并保存好,然后打开终端对程序进行编译运行。
五、 实验中遇到的问题及解决
六、 实验结果及分析
基本实验
可选实验
七、 源代码
Pipe.c
#include"stdio.h"
#include"unistd.h"
main(){
int i,j,fd[2];
char S[100];
pipe(fd);
if(i=fork==0){
sprintf(S,"child process 1 is sending a message n");
write(fd[1],S,50);
sleep(3);
return;
}
if(j=fork()==0){
sprintf(S,"child process 2 is sending a message n");
write(fd[1],S,50);
sleep(3);
return;
}else{
wait(0);
read(fd[0],S,50);
printf("%s",S);
read(fd[0],S,50);
printf("%s",S);
return;
}
}
Softint.c
#include"stdio.h"
#include"unsitd.h"
main(){
int i,j,fd[2];
char S[100];
pipe(fd);
if(i=fork==0){
sprintf(S,"child process 1 is sending a message n");
write(fd[1],S,50);
sleep(3);
return;
}
if(j=fork()==0){
sprintf(S,"child process 2 is sending a message n");
write(fd[1],S,50);
sleep(3);
return;
}else{
wait(0);
read(fd[0],S,50);
printf("%s",S);
read(fd[0],S,50);
printf("%s",S);
return;
}
}
版权声明:本文标题:Linux进程通信实验报告 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705183042h475873.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论