操作系统课程设计实验报告
设计题目二:Linux进程通信
——by
一、设计题目要求
掌握信号通信机制,实现进程之间通过信号进行通信;
掌握匿名管道及有名管道通信机制,实现进程之间通过管道进行通信;
理解System V IPC通信机制工作原理;
掌握共享内存、消息、管道、信号量通信实现方法。
二、程序设计思路及流程图
程序功能简介:
使用共享内存、消息、管道、信号量通信方式的函数来分别实现这四种通信方 式,用户可 根据提示选择其中一种通信方式。
程序设计思路:
建立有亲缘关系的父子进程以及无亲缘关系的进程,协调进程使之一次执行,可用wait()或waitpid( )来实现这一点。
程序流程图:
见附录A
三、涉及的背景知识及所用函数简介
1、kill函数
函数原型 :kill(pid_t pid,int sig)
头文件 :sys/types.h signal.h
作用 :用来送参数sig指定的信号给参数pid指定的进程
参数 :pid>0 将信号传给进程识别码为pid 的进程。
pid=0 将信号传给和目前进程相同进程组的所有进程
pid=-1 将信号广播传送给系统内所有的进程
pid<0 将信号传给进程组识别码为pid绝对值的所有进程
返回值 :执行成功则返回0,如果有错误则返回-1。
2、pipe函数
函数原型 :int pipe(int filedes[2])
头文件 :unistd.h
作用 :建立管道,并将文件描述词由filedes数组返回。
参数 :filedes[0]为管道的读取端,filedes[1]为管道写入端
返回值 :成功返回0,失败返回-1,错误原因存于error中。
3、shmget函数
函数原型 :int shmget(key_t key, size_t size, int shmflg);
头文件 :sys/ipc.h sys/shm.h
作用 :取得参数key所关联的共享内存识别代码。
参数 :当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共 享内存,其大小有参数size决定。shmflg参数在实验程序中,其值 可以为0.
返回值 :成功返回共享内存的标识符;不成功返回-1,errno储存错误原因。
4、shmat函数
函数原型 :void *shmat(int shmid, const void *shmaddr, int shmflg)
头文件 :sys/types.h sys/shm.h
作用 :将参数shmmid所指的共享内存和目前进程连接(attach)
参数 :shmaddr不为0,参数shmflg也没有指定SHM_RND旗标,则参数 shmaddr为连接地址;
shmaddr不为0,参数shmflg设置了SHM_RND旗标,则参数shmaddr 会自动调整为SHMLAB的整数倍;
shmaddr为0,核心自动选择一个地址。
返回值 :成功,返回共享内存识别代码;出错,-1,错误原因存于error中
5、shmdt 函数
函数原型 :int,shmdt(const,void,*shmaddr)
头文件 :sys/types.h sys/shm.h
作用 :将先前用shmat()连接好的共享内存脱离目前的进程。
参数 :shmaddr为先前shmat()返回的共享内存的地址。
返回值 :成功返回0,失败返回-1,错误原因存于error中。
6、shmctl 函数
函数原型 :int shmctl(int shmid