linux ipc機制 共享記憶體

2021-05-23 12:22:50 字數 2352 閱讀 3371

17.

shmat()

功能:聯接共享記憶體的操作.

語法:#include

#include

#include

void *shmat(shmid,shmaddr,shm***)

int shmid;

void *shmaddr;

int shmid;

說明:將由shmid指示的共享記憶體聯接到呼叫程序的資料段中.被聯接的段放在位址,該位址由以下準則指定:

. 若shmaddr等於(void *)0,則段聯接到由系統選擇的第乙個可用的位址上.

. 若shmaddr不等於(void *)0同時(shm***&shm_rnd)值為真,則段聯接到由(shmaddr-(shmaddr shmlba))給出的位址上.

. 若shmaddr不等於(void *)0同時(shm***&shm_rnd)值為假,則段聯接到由shmaddr指定的位址上.

若(shm***&sshm_rdonly)為真並且呼叫程序有讀允許,則被聯接的段為唯讀;否則,若值不為真且呼叫程序有讀寫許可權,則被聯接的段為可讀寫的.

返回值:若呼叫成功則返回被聯接的共享記憶體段在資料段上的啟始位址.否則返回值為-1.

20.shmctl()

功能:共享記憶體控制操作.

語法:#include

#include

#include

int shmctl(shmid,cmd,buf)

int shmid,cmd;

struct shmid_ds *buf;

說明:本系統呼叫提供一系列共享記憶體控制操作.操作行為由cmd指定.

以下為cmd的有效值:

. ipc_stat:將shmid相關的資料結構中各個元素的當前值放入由buf指向的結構中.

. ipc_set:將shmid相關的資料結構中的下列元素設定為由buf指向的結構中的對應值.

shm_perm.uid

shm_perm.gid

shm_perm.mode

本命令只能由有效uid等於shm_perm.cuid或shm_perm.uid的程序或有效uid有合適許可權的程序操作.

. ipc_rmid:刪除由shmid指示的共享記憶體.將它從系統中刪除並破壞相關的資料結構.

本命令只能由有效uid等於shm_perm.cuid或shm_perm.uid的程序或有效uid有合適許可權的程序操作.

返回值:若呼叫成功則返回0,否則返回-1.

18.shmdt()

功能:斷開共享記憶體聯接的操作.

語法:#include

#include

#include

void *shmdt(shmaddr)

void *shmaddr;

說明:本系統呼叫將由shmaddr指定的共享記憶體段從呼叫程序的資料段脫離出去.

返回值:若呼叫成功則返回值為0,否則返回值為-1.

19.shmget()

功能:取得共享記憶體段

語法:#include

#include

#include

int shmget(key,size,shm***)

key_t key;

int size,shm***;

說明:本系統呼叫返回key相關的共享記憶體識別符號.共享記憶體識別符號和相關資料結構及至少size位元組的共享記憶體段能正常建立,要求以下事實成立:

. 引數key等於ipc_private.

. 引數key沒有相關的共享記憶體識別符號,同時(shm***&ipc_creat)值為真.

共享記憶體建立時,新生成的共享記憶體標識相關的資料結構被初始化如下:

. shm_perm.cuid和shm_perm.uid設定為呼叫程序的有效uid.

. shm_perm.cgid和shm_perm.gid設定為呼叫程序的有效gid.

. shm_perm.mode訪問許可權位元位設定為shm***訪問許可權位元位.

. shm_lpid,shm_nattch,shm_atime,shm_dtime設定為0.

. shm_ctime設定為當前系統時間.

. shm_segsz設定為0.

返回值:若呼叫成功則返回乙個非0值,稱為共享記憶體識別符號,否則返回值為-1.

例子:本例包括上述所有共享記憶體作業系統呼叫:

#include

#include

#include

#include

#define shmkey 74

#define k 1024

int shmid;

cleanup()

main()

Linux IPC 共享記憶體

posix.1提供了兩種在無親緣關係的程序間共享記憶體的方式 1 記憶體對映檔案 由open函式開啟 乙個檔案 由mmap函式把得到的描述符對映到當前程序位址空間中。2 共享記憶體區物件 由shm open開啟乙個posix.1 ipc名字 通常是檔案系統中的乙個路徑名 所返回的描述符由mmap函式...

Linux IPC之共享記憶體

程序都有自己的虛擬位址空間 每個程序的虛擬位址空間都不一樣 自己只能操作自己的位址空間 虛擬位址空間 這時如何實現程序間的資料交換,這裡核心給我們提供了介面,讓多個程序共同操作同塊特殊的記憶體區域,這就實現了資料交換 共享記憶體區域是被多個程序共享的一部分物理記憶體。如果多個程序都把該記憶體區域對映...

共享記憶體機制

共享記憶體主要是通過對映機制實現的。共享記憶體例項一 include include include include using namespace std int main else getchar 注意,程序關閉後,所有控制代碼自動關閉,所以要在這裡暫停 解除檔案對映,關閉記憶體對映檔案物件控制...