As title …
從 voip_vlog 學習 FIFO 的處理
前序: Run voip_vlog process 會做什麼事情
- 創建 thread 執行 VOIP_VLOG_CORE_Hander_thread()
- 開 Unix Domain socket 收 command
- 使用了 mkfifo
- 另外可以看到這邊也使用了 select 接收訊息
- Linux Unix IPC: pipe 管道
- 特點:
- 半雙工, 數據只能一個方向流動; 如果需要雙方通信時, 需要建立兩個管道
- 只能用於有關係的兩個Process
- pipe對於兩端的Process而言, 就是一個文件, 其單獨構成一種文件系統, 並且存在於內存中.
- 數據的讀取跟寫入: 一個process像管道中寫的內容, 被管道另一端的Process讀取.
- pipe是由內核管理的一個緩衝區
- 用法:
- int pipe(int fd[2]) // fd[0]: 讀取端 fd[1]: 寫入端
- 特點:
- 命名管道: FIFO or named pipe
- FIFO 概念: 提供一個路徑與之關聯, 以 FIFO的文件形式存在於file system.
- 即使與FIFO的創建process不存在親緣關係的Process, 只要可以訪問開特定路徑, 就能夠彼此通過FIFO互相通信了
- FIFO 遵循 First In First Out
- 用法:
- #include<sys/types.h> & <sys/stat.h>
- int mkfifo(const char *path_name, mode_t mode)
- open() // fifo 比 pipe 多了這一道程序
- pipe 跟 FIFO 差別
man:The only difference between pipes and FIFOs is the manner in which they are created and opened. Once these tasks have been accomplished, I/O on pipes and FIFOs has exactly the same semantics