Linux四种进程通信机制

这是一个关于Linux进程通信的实验报告,涵盖了信号、匿名和有名管道、System V IPC(共享内存、消息队列、信号量)的使用。程序设计中,建立了父子进程和无亲缘关系的进程,通过选择不同的通信方式进行交互。报告详细介绍了kill、pipe、shmget、shmat等关键函数,并展示了调试过程和最终能够正常运行的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值