进程间通信实验报告

  • 格式:doc
  • 大小:102.00 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GDOU-B-11-112广东海洋大学学生实验报告书(学生用表)

实验名称进程间通信课程名称操作系统课程号

学院(系) 软件学院专业软件工程班级

学生姓名学号实验地点实验日期

一、实验目的

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

2、利用双向管道机制实现进程间通信,父子两个进程,第一个进程从键盘输入多个整数(以-1表示

整数序列的结束,-1不属于其中),每输入一个整数,便立即通过管道传送给第二个进程;第二个进

程对收到的数据进行排序(排序算法同学们自选,冒泡、选择、堆…均可),排序结果通过管道传递

给第一个进程;第一个进程显示排序结果。

选做题:利用LINUX进程间共享内存机制实现第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)执行结果如下:

三、实验总结

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

成绩指导教师日期注:请用A4纸书写,不够另附纸。