测品娱乐
您的当前位置:首页进程间通信实验报告

进程间通信实验报告

来源:测品娱乐

GDOU-B-11-112

广东海洋大学学生实验报告书(学生用表)

实验名称进程间通信

学院(系)

学生姓名

课程名称专业操作系统课程号班级实验日期软件学院学号软件工程实验地点

一、实验目的

1、利用文件锁机制,实现多进程共享一个文件,具体过程和要求参照课堂讲解。

2、利用双向管道机制实现进程间通信,父子两个进程,第一个进程从键盘输入多个整数(以-1表示整数序列的结束,-1不属于其中),每输入一个整数,便立即通过管道传送给第二个进程;第二个进程对收到的数据进行排序(排序算法同学们自选,冒泡、选择、堆…均可),排序结果通过管道传递给第一个进程;第一个进程显示排序结果。

选做题:利用LINU_进程间共享内存机制实现第2题,亦即将管道用共享内存机制来代替。

二、实验内容

1、(1)新建文件,编辑程序如下:

define_POSI__SOURCE

include

include

include

include

include

include

include

include

intmain(intargc,charargv[])

intnum,fd,i;

FILEf;

charbuff[100];

fd=open("XXX",O_RDWR);

flock(fd,LOCK_E_);

if(fd<=0){

printf("openerror ");

return1;

f=(FILE)fdopen(fd,"r+");

if(f==NULL){

printf("fdopenerror ");

return1;

for(i=1;i<=100000;i++){

lseek(fd,0,SEEK_SET);

fscanf(f,"%d",num);

sprintf(buff,"%d ",num+1);lseek(fd,0,SEEK_SET);write(fd,buff,strlen(buff));}

flock(fd,LOCK_UN);

fclose(f);

return0;

(2)执行结果如下:

2、(1)新建文件,编写程序如下:include

include

includeinclude

intmain()

intfd1[2];

intfd2[2];

pid_tpid;

pipe(fd1);

pipe(fd2);

pid=fork();

if(pid==0)

close(fd1[1]);

close(fd2[0]);intnum;

intsum=0;

charstr[10];

while(read(fd1[0],str,100)>0)

sscanf(str,"%d",num);

printf("receiveanumber:%d ",num);fflush(stdout);

sum+=num;

close(fd1[0]);

sprintf(str,"%d",sum);

write(fd2[1],str,strlen(str));

close(fd2[1]);

_e_it(0);

else

intn;

charstr[10];

close(fd1[0]);

close(fd2[1]);

while(1)

scanf("%d",n);

if(n==-1)break;

sprintf(str,"%d ",n);

write(fd1[1],str,strlen(str));}

close(fd1[1]);

read(fd2[0],str,100);

close(fd2[0]);

printf(" sumis%s ",str);

fflush(stdout);

_e_it(0);

return0;

(2)执行结果如下:

三、实验总结

通过这次实验,使我了解了文件锁机制是如何控制多进程共享同一文件的,以及系统是如何利用双向管道机制实现进程间通信。

成绩指导教师日期

注:请用A4纸书写,不够另附纸。

因篇幅问题不能全部显示,请点此查看更多更全内容