1. 程式人生 > >linux程序間的通訊

linux程序間的通訊

  1. 什麼是程序間通訊?
    程序間通訊就是在不同程序之間傳播或交換資訊,那麼不同程序之間存在著什麼雙方都可以訪問的介質呢?程序的使用者空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享記憶體區。另外,系統空間是“公共場所”,各程序均可以訪問,所以核心也可以提供這樣的條件。此外,還有雙方都可以訪問的外設。在這個意義上,兩個程序當然也可以通過磁碟上的普通檔案交換資訊,或者通過“登錄檔”或其它資料庫中的某些表項和記錄交換資訊。廣義上這也是程序間通訊的手段,但是一般都不把這算作“程序間通訊”。(來自百度百科)

注:因此在使用者空間實現程序通訊是不可能的,通過Linux核心通訊
2. 有哪幾種通訊方式?
管道通訊:無名管道、有名管道(檔案系統中有名)
訊號通訊:訊號(通知)通訊包括:訊號的傳送、訊號的接收和訊號的處理。
IPC(Inter-Process Communication)通訊:共享記憶體、訊息佇列和訊號燈。
以上是單機模式下的程序通訊(只有一個Linux核心)
Socket通訊:存在於一個網路中兩個程序之間的通訊(兩個Linux核心)。
3. 學習思路
程序通訊的學習思路:每一種通訊方式都是基於檔案IO的思想。
open:功能:建立或開啟程序通訊物件。函式形式不一樣,有的是有多個函式完成。
write: 功能:向程序通訊物件中寫入內容。函式形式不一樣。
read: 功能:從程序通訊物件中讀取內容。函式形式不一樣。
close: 功能:關閉或刪除程序通訊物件。形式不一樣。

這裡寫圖片描述

上面圖片是檔案I/O讀寫函式和IPC(Inter-Process Communication)通訊:共享記憶體、訊息佇列和訊號燈相關函式的對比。具體可使用linux下man命令檢視具體形式比如(man read,man shmget)。如下圖:
這裡寫圖片描述

這裡寫圖片描述

通過man命令檢視這些函式的具體形式和引數,即可瞭解並使用。