程式間通訊(linux程式與執行緒學習筆記)

嵌入式~皮皮發表於2020-10-05

 程式間通訊介紹
 
    早期UNIX程式間通訊方式
    
        無名訊號(pipe)
        有名管道(fifo)
        訊號(signal)
        
    System V IPC
    
        共享記憶體(share memory)
        訊息佇列(message queue)
        訊號燈集(semaphore set)
        
    套接字(socket)
    
 無名管道特點
 
    無名管道具有以下特點:
    
        只能用於具有親緣關係的程式之間的通訊
        
        單工的通訊模式,具有固定的讀端和寫端
        
        無名管道建立時會返回兩個檔案描述符,分別用於讀寫管道
        
 無名管道建立 - pipe
 
    #include<unistd.h>
    
    int pipe(int pdf[2]);
    
    成功時返回0,失敗時返回EOF
    
    pdf 包含兩個元素的整形陣列,用來儲存檔案描述符
    
    pdf[0]用於讀管道,pdf[1]用於寫管道
    
 讀無名管道
 
    寫端存在(至少有一個程式可以通過無名管道寫資料)
    
        有資料    read返回實際讀取的位元組數
        
        無資料    程式讀阻塞
        
    寫端不存在
    
        有資料    read返回實際讀取的位元組數
        
        無資料    read返回0
        
 寫無名管道
 
    讀端存在(至少有一個程式可以通過檔案描述符讀取管道內容)
    
        有空間    write返回實際寫入位元組數
        
        無空間    程式寫阻塞
        
    讀端不存在
    
        有空間    管道斷裂!
        
        無空間    管道斷裂!
    

相關文章