linux的進程間通信概述
阿新 • • 發佈:2019-03-13
父子進程 bsp 互斥 註意 lose 半雙工 隊列 使用方法 mkfifo 1.2.2. 有名管道(fifo)
a. 有名管道的原理:實質也是內核維護的一塊內存,表現形式為一個有名字的文件
b. 有名管道的使用方法:固定一個文件名,2個進程分別使用mkfifo創建fifo文件,然後分別open打開獲取到fd,然後一個讀一個寫
c. 管道通信限制:半雙工(註意不限父子進程,任意2個進程都可)
d. 管道通信的函數:mkfifo、open、write、read、close
一 進程間通信
1.1. linux內核提供多種進程間通信機制
a. 無名管道和有名管道
b. SystemV IPC:信號量、消息隊列、共享內存
c. Socket域套接字
d. 信號
1.2. 無名管道和有名管道
1.2.1. 管道(無名管道)
a. 管道通信的原理:內核維護的一塊內存,有讀端和寫端(管道是單向通信的)
b. 管道通信的方法:父進程創建管理後fork子進程,子進程繼承父進程的管道fd
c. 管道通信的限制:只能在父子進程間通信、半雙工
d. 管道通信的函數:pipe、write、read、close
a. 有名管道的原理:實質也是內核維護的一塊內存,表現形式為一個有名字的文件
b. 有名管道的使用方法:固定一個文件名,2個進程分別使用mkfifo創建fifo文件,然後分別open打開獲取到fd,然後一個讀一個寫
c. 管道通信限制:半雙工(註意不限父子進程,任意2個進程都可)
d. 管道通信的函數:mkfifo、open、write、read、close
1.3. SystemV IPC介紹
1.3.1. SystemV IPC的基本特點
a. 系統通過一些專用API來提供SystemV IPC功能
b. 分為:信號量、消息隊列、共享內存
c. 其實質也是內核提供的公共內存
1.3.2. 消息隊列
a. 本質上是一個隊列,隊列可以理解為(內核維護的一個)FIFO
1.3.3. 信號量
a. 實質就是個計數器(其實就是一個可以用來計數的變量,可以理解為int a)
b. 通過計數值來提供互斥和同步
1.3.4. 共享內存
a. 大片內存直接映射
b. 類似於LCD顯示時的顯存用法
linux的進程間通信概述