pipe & fifo(管道) Back

  • 讀寫規則 (從空pipe或空fifo中讀寫):
    • Read:
      • pipe或fifo已經被只寫打開: 返回EAGAIN錯誤
      • pipe或fifo沒有被只寫打開: 返回0 (文件描述符)
    • Write:
      • pipe或fifo已經被只讀打開
        • 寫入數據量不大於PIPE_BUF (保證原子性): 有足夠空間存放則一次性全部寫入, 沒有則返回EAGAIN錯誤 (不能存在部分寫入)
        • 寫入數據量大於PIPE_BUF (不保證原子性): 有足夠空間則全部寫入, 沒有則部分寫入後立即返回
  • 額外規則:
    • 當pipe或fifio最後一個關閉時, 仍在該pipe或fifo上的數據將被丟棄

1. pipe (unnamed pipe)

  • 單向通信通通道
  • 只適用於有父子關係的進程間通信
  • 實現雙向傳輸必須創建兩個管道
method
int pipe(int fd[2])
parameters
  • fd: 用於通信的一對文件描述符
    • fd[0]:
    • fd[1]:
return value
  • 0: success
  • -1: failure

2. fifo (named pipe)

  • 路徑名相關聯, 以文件存在於文件系統
  • 文件名只是便於引用, 但所對應的文件沒有數據(只適用於阻塞使用)
  • 適用於任何進程間通信
method
int mkfifo(char* pathname, mode_t mode)
parameters
  • pathname: 管道名稱(絕對路徑名)
  • mode: 打開文件的方式
return value
  • 0: success
  • -1: failure

results matching ""

    No results matching ""