在Linux作業系統中實現內部程式通訊(轉)

BSDLite發表於2007-08-16
在Linux作業系統中實現內部程式通訊(轉)[@more@]  Linux給我們提供了豐富的內部程式通訊機制,包括共享記憶體、記憶體對映檔案、先入先出(FIFO)、介面(sockets)以及多種用於同步的標識。在本文中,我們主要討論一下共享記憶體和記憶體對映檔案技術。

  一般來說,內部程式通訊(interprocess communication)也就是IPC,是指兩個或兩個以上程式以及兩個或者兩個以上執行緒之間進行通訊聯絡。每個IPC機制都有不同的強項或者弱點,不過沒有一個IPC機制包含內建的同步方法。因此程式設計師不但需要自己在程式中實現同步,而且還需要為了利用IPC機制而自己開發通訊協議。

  共享記憶體

  使用共享記憶體和使用malloc來分配記憶體區域很相似。使用共享記憶體的方法是:

  1.對一個程式/執行緒使用shmget分配記憶體區域。

  2.使用shmat放置一個或多個程式/執行緒在共享記憶體中,你也可以用shmctl來獲取資訊或者控制共享區域。

  3.使用shmdt從共享區域中分離。

  4.使用shmctl解除分配空間

  下面是個例子:
CODE:
  //建立共享記憶體區域
  intshared_id;
  char *region;
  const intshm_size = 1024;
  
  shared_id = shmget(IPC_PRIVATE,//保證使用唯一ID
            shm_size,
            IPC_CREAT | IPC_EXCL |//建立一個新的記憶體區域
            S_IRUSR | S_IWUSR);//使當前使用者可以讀寫這個區域
  
  //交叉程式或生成程式.
  
  //將新建的記憶體區域放入程式/執行緒
  region = (char*) shmat(segment_id, 0, 0);
  
  //其他程式程式碼
  ...
  
  //將各個程式/執行緒分離出來
  shmdt(region);
  
  //破壞掉共享記憶體區域
  shmctl(shared_id, IPC_RMID, 0);

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-962393/,如需轉載,請註明出處,否則將追究法律責任。

在Linux作業系統中實現內部程式通訊(轉)
請登入後發表評論 登入
全部評論

相關文章