程序間的通訊 二

2021-10-08 22:43:05 字數 510 閱讀 1870

程序間通訊(一)

這一節講共享記憶體

記憶體大家都知道是什麼東東,那共享記憶體是什麼東東呢?很簡單嘛,核心專

門留出了一塊記憶體,這段記憶體呢,可以由需要訪問的程序將其對映到自己的私有

位址空間,不同程序可以及時看到某程序對共享記憶體的資料進行更新。採用記憶體

共享通訊機制的好處是什麼呢?很明顯,就是效率非常高,為什麼?因為程序可

以直接讀寫記憶體,不再需要進行資料的拷貝。當然了,由於多個程序都可以對共

享記憶體進行讀寫資料,自然地,要引進某種同步機制,如互斥鎖和訊號量等。

如何實現共享記憶體

共享記憶體的實現分為兩個步驟,第一步是建立共享記憶體,這裡用到的函式是

shmget,也就是從記憶體中獲得一段共享記憶體區域。第二步對映共享記憶體,也就

是把這段剛建立的共享記憶體對映到具體的程序空間去,這裡使用的函式是 shmat。

完成這二步後,就可以使用不帶快取的 i/o 讀寫命令對其進行操作啦。如果要撤

銷對映,那麼使用函式 shmdt 來實現。

程序間通訊(二)

傳遞更多的資料 到目前為止我們所用的機制只是簡單的在乙個fread或是fwrite中傳送或是接收全部的資料。有時我們也許以更小的尺寸傳送資料,或是也許我們並不知道輸出的大小。為了避免宣告乙個大的緩衝區,我們可以使用多個fread或是fwrite呼叫並分別處理這些資料。下面是乙個程式,popen3.c...

程序間通訊《二》

sysv 共享記憶體。sysv 共享記憶體和posix 共享記憶體類似。主要用到的api有 shmget,shmat,shmctl,shmdt,下面將這些api一一道來。intshmget key t key,size t size,intoflag 返回 成功返回共享記憶體的描述字,出錯時 1 在...

程序間通訊(二)

傳遞更多的資料 到目前為止我們所用的機制只是簡單的在乙個fread或是fwrite中傳送或是接收全部的資料。有時我們也許以更小的尺寸傳送資料,或是也許我們並不知道輸出的大小。為了避免宣告乙個大的緩衝區,我們可以使用多個fread或是fwrite呼叫並分別處理這些資料。下面是乙個程式,popen3.c...