共享儲存(UNIX環境高階程式設計筆記)

2021-09-19 23:12:07 字數 1138 閱讀 3577

共享儲存允許兩個或者多個程序共享乙個給定的儲存區。因為資料不需要在客戶程序和伺服器程序之間進行複製,所以這是最快的一種ipc。通常,使用訊號量同步共享儲存訪問。

呼叫的第乙個函式通常是shmget,它獲得乙個共享儲存標識。

#include

int shmget(key_t key, size_t size, int flag);

返回值:若成功,返回共享儲存id;若出錯,返回-1

引數size是該共享儲存段的長度,以位元組為單位。如果正在建立乙個新段,則必須指定其size。如果正在引用乙個現存的段,則將size指定為0。當建立乙個新段時,段內的內容初始化為0。

shmctl函式對共享儲存段執行多種操作。

#include

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

返回值:若成功,返回0;若出錯,返回-1

cmd引數指定下列5中命令的一種,使其在shmid指定的段上執行。

巨集定義作用

ipc_stat

獲取此段的shmid_ds結構,並將它儲存在由buf指向的結構中。

ipc_set

按buf指向的結構中的值設定與此共享儲存段相關的shmid_ds結構中的shm_perm.uid、shm_perm.gid和shm_perm.mode成員。

ipc_rmid

從系統中刪除該共享記憶體段

shm_lock

在記憶體中對共享記憶體中加鎖。此命令只能由超級使用者執行。

shm_unlock

解鎖共享記憶體段。此命令只能由超級使用者執行。

一旦建立了乙個共享記憶體段,程序就可以呼叫shmat將其連線到它的位址空間中。

#include

void shmat*(int shmid, const void *addr, int flag);

返回值:若成功,返回指向共享儲存段的指標;若出錯,返回-1

分離共享儲存可使用shmdt函式。

#include

int shmdt(const void *addr);

返回值:若成功,返回0;若出錯,返回-1

shmdt並不從系統中刪除其識別符號以及其相關的資料結構。該識別符號依然存在,直至某個程序呼叫shmctl函式刪除它位置。

《UNIX環境高階程式設計》筆記 檔案共享

分類 unix環境高階程式設計 筆記 2013 09 13 15 51 500人閱讀收藏 舉報目錄 檔案共享 dup和dup2函式 核心使用3種資料結構來表示開啟的檔案,他們的關係如下 每個程序都有一張程序表項,記錄程序開啟的檔案 fd標誌 close on exec,若乙個檔案描述符在close ...

unix環境高階程式設計

unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...

unix環境高階程式設計

檔案描述符file descriptor通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或建立乙個新檔案時,它都返回乙個檔案描述符。在讀寫檔案時,可以私用這個檔案描述符。按管理,每當執行乙個新程式時,所有的shell都為其開啟了3個標準檔案描述符 標準輸入,標準...