从初识Linux到离不开系列(末)进程间通信

这原本是一本书的内容

由于其中的大部分内容需要实践来实现,我把理论压缩成一篇博客,诸多没介绍的细节还望大家见谅。

  • Posix IPC
  • 管道和FIFO
  • 消息队列
  • 同步和互斥量
  • 信号量
  • 共享内存区

这里边有些内容是在实验的时候摸索的,发现有许多涉及到PV操作的代码,就好奇的读了下,小编我的能力不足,不能为大家介绍的太详细。

Posix IPC

Posix IPC由 Posix消息队列、Posix信号量、Posix共享内存区构成。
IPC的函数
消息队列 |信号量 |共享内存区

管道和FIFO

管道应该是一种比较简单的消息传递的方法,命令行中也有管道的说法,是用来筛选的 例如 :”|”。

管道虽然功能强大,但是只能适用于有共同父亲进程的各个子进程之间。

FIFO是半双工,FIFO可以和路径名关联,可以帮助无亲缘关系的进程访问同一个管道。

属于相辅相成。

消息队列

消息队列是一个消息的链表,有足够写权限的线程可以往队列里放消息,有足够读权限的线程可以从队列里取出消息。

Posix消息队列和System V消息队列的差别是
1、前者 读 总是返回最高优先级最早的消息,后者 返回 任意指定优先级
2、往空队列里放消息时,前者允许产生一个信号或启动线程,后者无
3、前者 一个无符号整数优先级 后者 一个长整数类型

mq_open mq_close mq_unlink函数

每个消息队列有四个属性
mq_getattr 返回这些属性 mq_setattr设置某个属性

mq_send和mq_receive函数
往队列里放消息、读消息

同步和互斥量

这相当于PV操作,也就是生产者-消费者问题
涉及到互斥锁、读写锁

Posix信号量

同样是为了解决生产者-消费者问题。
sem_open sem _close sem_unlink函数
涉及到缓冲区,进程间共享信号量

System V信号量

semget函数
创建一个信号量集或访问一个已存在的信号量集
semop函数
对一个或多个信号量的操作
semctl函数
对信号量进行操作

Posix共享内存区

shm_open函数
创建共享内存区或打开一个已存在的
shm_unlink函数
ftruncate函数
修改普通文件或共享内存区对象的大小,处理mmap时
fstat函数
获取共享内存区对象信息

System V共享内存区

shmget函数
创建一个新的共享内存区或访问一个已存在的
shmat函数
附接共享内存区到调用进程的地址空间
shmdt函数
断开共享内存区
shmctl函数
对共享内存区的操作

这也算是一次简单的旅程吧,从开始的邂逅到现在的了解,以后还将继续合作下去。。。可以做到半永不完结了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值