Linux四种进程通信机制

操作系统课程设计实验报告


设计题目二: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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值