linux进程间通信IPC简介

 

 

最初UNIX IPC包括:   PIPLE,FIFO,SIGNAL;

System V IPC包括:  System V消息队列,System V信号灯,System V共享内存区

Posix IPC包括:     Posix消息队列,Posix信号灯,Posix共享内存区。 

 

现有大部分Unix和流行版本都是遵循POSIX标准的,而Linux从一开始就遵循POSIX标准,

 

Linux并把上面的IPC都继承了下来; 

 

linux下进程间通信的几种主要手段简介:

 

1.管道pipe

管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种:

无名管道可用于具有亲缘关系进程间的通信,即可用于父进程和子进程间的通信,

有名管道可用于运行于同一台机器上的任意两个进程间的通信。

 

2.消息队列

消息队列是消息的链接表,包括Posix消息队列system V消息队列。

消息队列用于运行于同一台机器上的进程间通信,它和管道很相似,“有足够权限的进程可以向队列中添加消息,

被赋予读权限的进程则可以读走队列中的消息“。消息队列克服了信号承载信息量少,

管道只能承载无格式字节流以及缓冲区大小受限等缺点。 我们可以用流管道或者套接口的方式来取代它。 

 

3.共享内存shared memory

共享内存是运行在同一台机器上的进程间通信最快的方式,因为数据不需要在不同的进程间复制。

通常由一个进程创建一块共享内存区,其余进程对这块内存区进行读写。共享内存往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。 

使用共享存储来实现进程间通信的注意点是对数据存取的同步,必须确保当一个进程去读取数据时,它所想要的数据已经写好了。通常,信号量被要来实现对共享存储数据存取的同步

 

4.信号signal

5.信号量Semaphore

 

信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是前一节的共享内存方式的进程间通信。

本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共享资源,进程需要执行下列操作: 

(1) 测试控制该资源的信号量。

(2) 若此信号量的值为正,则允许进行使用该资源。进程将进号量减1。 

(3) 若此信号量为0,则该资源目前不可用,进程进入睡眠状态,直至信号量值大于0,进程被唤醒,转入步骤(1)。 

(4) 当进程不再使用一个信号量控制的资源时,信号量值加1。如果此时有进程正在睡眠等待此信号量,则唤醒此进程。 

 

维护信号量状态的是Linux内核操作系统而不是用户进程。

中看到内核用来维护信号量状态的各个结构的定义。信号量是一个数据集合,

用户可以单独使用这一集合的每个元素。要调用的第一个函数是 semget,用以获得一个信号量ID。

 

6.套接口socket

套接口(socket)编程是实现Linux系统和其他大多数操作系统中进程间通信的主要方式之一。

我们熟知的WWW服务、FTP服务、TELNET服务等都是基于套接口编程来实现的。

除了在异地的计算机进程间以外,套接口同样适用于本地同一台计算机内部的进程间通信。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值