[Linux-IPC][VoIP][vlog] Trace voip_vlog and learn FIFO

As title … 

從 voip_vlog 學習 FIFO 的處理

前序: Run voip_vlog process 會做什麼事情

  1. 創建 thread 執行 VOIP_VLOG_CORE_Hander_thread()
  2. 開 Unix Domain socket 收 command
  1. 使用了 mkfifo
  2. 另外可以看到這邊也使用了 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