記linux下程序間通訊方式之共享記憶體(一)

2021-09-12 00:08:52 字數 1130 閱讀 7216

共享記憶體是程序間通訊中效率極高的一種方案,以下是我對共享記憶體的探索學習過程。

這個是共享記憶體的具象化,程序a和程序b兩個不相關的程序都可以通過特殊的連線方式共同訪問使用同一塊記憶體。

共享記憶體中涉及到的如下幾個函式

作用:用來建立共享記憶體

返回值:共享記憶體段的id,供shmat使用

形參:key : 這個共享記憶體段的名字

size : 共享記憶體的大小

shm*** : 由九個許可權標誌構成,用法和建立檔案時使用的mode模式標誌是一樣的,為了方便,這裡設定成0666

作用:當共享記憶體剛被建立時,其他記憶體還不能訪問它,該函式起到連線的作用。

返回值:共享記憶體提供給該程序的起始位址

形參:shmid : shmget()函式返回值為shmid;

shmaddr : 把共享記憶體連線到當前程序的時候準備放置它的那個位址,一般設定為0,讓其自動選擇。

shm*** : 連線時設定的讀寫標誌,一般設定為0.

作用:斷開該程序與共享記憶體的連線

返回值:成功返回0,失敗返回-1;

形參:shmaddr:shmat的返回值即shmaddr

作用:形參:

shmid: shm_id是shmget函式返回的共享記憶體識別符號。

cmd : 是要採取的操作,它可以取下面的三個值 :

ipc_stat:把shmid_ds結構中的資料設定為共享記憶體的當前關聯值,即用共享記憶體的當前關聯值覆蓋shmid_ds的值。

ipc_set:如果程序有足夠的許可權,就把共享記憶體的當前關聯值設定為shmid_ds結構中給出的值

ipc_rmid:刪除共享記憶體段

第三個引數,buf是乙個結構指標,指向乙個儲存著共享記憶體的模式狀態和訪問許可權的資料結構。

基本的函式到上面就學習完畢了,下面是學習如何應用它們。

上圖是學習按照某博主的**敲了一遍後,執行結果。到此,已經初步了解共享記憶體的使用,為確保程序間同步的原子性,接下來應該學習的是條件量,即pv操作。

Linux下程序間通訊方式 管道

管道 pipe 是 一種最基本的ipc機制,由pipe函式建立 include int pipe int filedes 2 呼叫pipe函式時在核心中開闢一塊緩衝區 稱為管道 用於通訊,它有乙個讀端乙個寫端,然後通過filedes引數傳出給使用者程式兩個檔案描符,filedes 0 指向管道的讀端...

linux 程序間通訊方式

1 無名管道通訊 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 高階管道通訊 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式...

Linux程序間通訊方式

目錄前言 一 程序間通訊的目的 二 linux程序間通訊方式簡介 程序間的通訊就是在不同程序之間傳播或者交換資訊。程序的使用者空間是相互獨顯然可以體用這幾樣的立的,一般而言是不能互相訪問的,唯一的例外是共享空間。但是系統空間卻是 公共場所 所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪...