进程间通信实验报告GDOU-B-11-112
广东海洋大学学生实验报告书(学生用表)
实验名称
进程间通信
课程名称
操作系统
课程号
学院(系)
软件学院
专业
软件工程
班级
学生姓名
学号
实验地点
实验日期
一、实验目的
1、利用文件锁机制,实现多进程共享一个文件,具体过程和要求参照课堂讲...
GDOU-B-11-112
广东海洋大学学生实验报告
(学生用
)
实验名称
进程间通信
课程名称
操作系统
课程号
学院(系)
软件学院
专业
软件工程
班级
学生姓名
学号
实验地点
实验日期
一、实验目的
1、利用文件锁机制,实现多进程共享一个文件,具体过程和要求参照课堂讲解。
2、利用双向管道机制实现进程间通信,父子两个进程,第一个进程从键盘输入多个整数(以-1表示整数序列的结束,-1不属于其中),每输入一个整数,便立即通过管道传送给第二个进程;第二个进程对收到的数据进行排序(排序算法同学们自选,冒泡、选择、堆…均可),排序结果通过管道传递给第一个进程;第一个进程显示排序结果。
选做题:利用LINUX进程间共享内存机制实现第2题,亦即将管道用共享内存机制来代替。
2、实验内容
1、(1)新建文件,编辑程序如下:
#define _POSIX_SOURCE
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char * argv[])
{
int num, fd,i;
FILE *f;
char buff[100];
fd = open("number.txt", O_RDWR);
flock(fd,LOCK_EX);
if(fd<=0){
printf("open error\n");
return 1;
}
f = (FILE *)fdopen(fd, "r+");
if(f == NULL){
printf("fdopen error\n");
return 1;
}
for(i=1;i<=100000;i++){
lseek(fd, 0, SEEK_SET);
fscanf(f, "%d", &num);
sprintf(buff, "%d\n", num + 1);
lseek(fd, 0, SEEK_SET);
write(fd, buff,strlen(buff));
}
flock(fd,LOCK_UN);
fclose(f);
return 0;
}
(2)执行结果如下:
2、(1)新建文件,编写程序如下:
#include
#include
#include
#include
int main ()
{
int fd1[2];
int fd2[2];
pid_t pid;
pipe(fd1);
pipe(fd2);
pid = fork();
if (pid == 0)
{
close(fd1[1]);
close(fd2[0]);
int num;
int sum = 0;
char str[10];
while(read(fd1[0], str, 100)>0)
{
sscanf(str, "%d", &num);
printf("receive a number : %d\n", num);
fflush(stdout);
sum += num;
}
close(fd1[0]);
sprintf(str, "%d", sum);
write(fd2[1], str, strlen(str));
close(fd2[1]);
_exit(0);
}
else
{
int n;
char str[10];
close(fd1[0]);
close(fd2[1]);
while(1)
{
scanf("%d", &n);
if(n == -1)break;
sprintf(str, "%d\n", n);
write (fd1[1], str, strlen (str));
}
close(fd1[1]);
read(fd2[0], str, 100);
close(fd2[0]);
printf("\nsum is %s\n", str);
fflush(stdout);
_exit(0);
}
return 0;
}
(2)执行结果如下:
3、实验总结
通过这次实验,使我了解了文件锁机制是如何控制多进程共享同一文件的,以及系统是如何利用双向管道机制实现进程间通信。
成绩
指导教师
日期
注:请用A4纸书写,不够另附纸。
本文档为【进程间通信实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。