进程间相互通信Word下载.docx
- 文档编号:19828816
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:13
- 大小:271.33KB
进程间相互通信Word下载.docx
《进程间相互通信Word下载.docx》由会员分享,可在线阅读,更多相关《进程间相互通信Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
洪联系
评语:
1.实验目的:
掌握用pipe进行进程间通信;
掌握用共享内存进行进程间通信;
理解父进程与子进程各处独立的地址空间,父进程与子进程,它们只能通过pipe、共享内存等方式进行通信;
2.实验环境
Win7系统,vmware虚拟机下运行的Linux。
3.实验内容
应用Linux共享内存机制和管道机制,实现两个进程间相互传递一个学生的记录,包括:
1.学号:
SID,char型,8位
2.姓名:
NAME,char型,8位
3.年龄:
Age,int型
4.专业:
Specialty,char型,8位
5.班级:
Class,char型,4位
一个记录约30个字节。
4.实验程序
1.Shm1.c
#include<
sys/types.h>
sys/ipc.h>
sys/shm.h>
stdio.h>
stdlib.h>
unistd.h>
string.h>
typedefstruct{
charname[4];
charsid[8];
charspecialty[8];
charclass[4];
intage;
}people;
intmain(intargc,char*argv[])
{
intshm_id,i;
key_tkey;
chartemp;
people*p_map;
char*path="
./shm1.c"
;
/*
使用ftok根据path和作为项目标识符的单个字符生成key值确保进程间使用相同的key
使用相同key值的shmget只会在第一次时创建新结构
*/
key=ftok(path,0);
if(key==-1)
{
perror("
ftokerror\n"
);
return-1;
}
shm_id=shmget(key,4096,IPC_CREAT);
if(shm_id==-1)
shmgeterror\n"
p_map=(people*)shmat(shm_id,NULL,0);
temp='
a'
for(i=0;
i<
10;
i++)
temp+=1;
memcpy((*(p_map+i)).name,&
temp,1);
memcpy((*(p_map+i)).sid,&
memcpy((*(p_map+i)).specialty,&
memcpy((*(p_map+i)).class,&
(*(p_map+i)).age=20+i;
system("
ipcs-m"
if(shmdt(p_map)==-1)
detacherror"
}
2.shm2.c
/*
SystemV共享内存区是放在内核当中的,因此在内核重新引导之前,对数据的修改是一直保持的,
这也是我们的实验能够实现的原因,因为在第二个进程起动时,第一个进程已经运行结束了.
*/
/*完成从共享内存区的读出*/
charspecialty[4];
charsid[4];
intmain(intargc,char*argv)
intshm_id,i;
perror("
return-1;
shmgeterror"
for(i=0;
i<
10;
printf("
name:
%s\t"
(*(p_map+i)).name);
specialty:
(*(p_map+i)).specialty);
sid:
(*(p_map+i)).sid);
class:
(*(p_map+i)).class);
age:
%d\n"
(*(p_map+i)).age);
shmdterror\n"
exit(EXIT_SUCCESS);
3.Pipe.c
sys/file.h>
intpfd[2];
intprocess1();
intprocess2();
intmain()
inti,status;
if(pipe(pfd)<
0)
printf("
pipecreateerror!
\n"
exit
(1);
else
Pipeiscreatedsuccessfully!
if(fork()==0)
process1();
process2();
close(pfd[0]);
close(pfd[1]);
i<
2;
i++)
wait(&
status);
exit(0);
intprocess1()
Process1isrunning.......\n"
inti=0;
charw_buf[5];
for(i=1;
sleep(3);
strcpy(w_buf,"
aaa\0"
if(write(pfd[1],w_buf,4)==-1)
Writetopipeerror\n"
Process1isover!
}
intprocess2()
Process2isrunning.......\n"
charr_buf[5];
while
(1)
sleep
(1);
strcpy(r_buf,"
kkk\0"
if(read(pfd[0],r_buf,4)==0)break;
Get%sfrompipeinprocess2.\n"
r_buf);
Process2isover!
5.实验结果及其分析
Shm1.c输入:
运行:
Shm2.c输入:
Pipe.c输入:
6.实验小结
我觉得老师可以教我们怎么把虚拟机与自己的电脑连接起来的方法。
可以把自己电脑上的东西复制到虚拟机上面去。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 相互 通信