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 注意,程序關閉後,所有控制代碼自動關閉,所以要在這裡暫停 解除檔案對映,關閉記憶體對映檔案物件控制...