10. 进程间通信

10. 进程间通信

  • 1. 管道和 FIFO
  • 2. 消息队列
  • 3. 信号量
  • 4. 共享内存
  • 5. 套接字

这里只是简单介绍,需要详细了解可以看这篇文章:Linux进程间通信

1. 管道和 FIFO

管道就是把一个进程连接到另一个进程的数据流,管道被抽象为一个文件,叫做管道文件。管道文件包括三种:

  • 普通管道 pipe:通常有两种限制,一是单工,数据只能单向传输;二是只能在父子或兄弟进程间使用
  • 流管道 s_pipe:去除了普通管道的第一种限制,为半双工,可以双向传输;只能在父子或兄弟进程间使用
  • 有名管道 name_pipe(FIFO):去除普通管道的两种限制,可以双向通信,并且允许在不相关进程间通信

2. 消息队列

消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。消息队列包括 POSIX 和 System V 消息队列。
消息队列是 UNIX 下不同进程之间实现共享资源的一种机制,UNIX 允许不同进程将格式化的数据流以消息队列形式发送给任意进程,有足够权限的进程可以向队列种添加信息,被赋予读权限的进程则可以读走队列中的消息。

3. 信号量

信号量是一个计数器,与其它进程间通信方式不太相同,它主要用于控制多个进程或一个进程内的多个线程间对共享资源的访问,相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志,除了用于共享资源的访问控制外,还可以用于进程同步。
它常作为一个锁机制,防止某进程在访问资源时其他进程也访问该资源,因此,主要作为进程间以及同一个进程内不同线程之间的同步手段。

4. 共享内存

共享内存就是映射一段能被其他进程访问的内存,这段共享内存由一个进程创建,但其它的多个进程都可以访问,使得多个进程可以访问同一块内存空间。

5. 套接字

套接字是一种基于网络的通信方式,在一个典型的客户端、服务器场景中,方式如下:

  1. 各个应用程序创建一个 socket,socket 是一个允许通信的设备,两个应用程序都需要用到。
  2. 服务器将自己的 socket 绑定到一个总所周知的地址上,使客户端能够定位到它的位置。

你可能感兴趣的:(嵌入式Linux应用开发,嵌入式硬件)