1. 基本概念
共享記憶體是ipc機制中的一種,作用是使得兩個不相關的程序訪問同一段記憶體,是一種程序間傳輸資料的一種有效方式。
2. 函式學習
2.1 建立/獲取共享記憶體
函式名:
shmget
函式原型: man shmget
int shmget(key_t key, size_t size, int shm***);
函式功能:
建立或者獲取共享記憶體,並返回其描述符(shmid)。
所屬標頭檔案:
返回值:
成功 :返回共享記憶體描述符(shmid) 失敗 :返回-1
引數說明
key :共享記憶體的鍵值。
size :共享記憶體的大小。
shm*** :開啟標誌,如果使用了ipc_creat,則會新建立一塊共享記憶體。
2.2 對映共享記憶體
函式名:
shmat
函式原型: man shmat
void *shmat(int shmid, const void *shmaddr, int shm***);
函式功能:
把shmid指定的共享記憶體對映到程序的位址空間裡。
所屬標頭檔案:
返回值:
失敗 :返回-1
引數說明:
shmid :要對映的共享記憶體的描述符。
shm*** :標誌。
2.3 脫離共享記憶體
函式名:
shmdt
函式原型:man shmdt
int shmdt(const void *shmaddr);
函式功能:
從程序位址空間中斷掉與共享記憶體的聯絡。
所屬標頭檔案:
返回值:
成功 :返回0
失敗 :返回-1
引數說明:
2.4 刪除共享記憶體
函式名:
shmctl
函式原型: man shmctl
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
函式功能:
控制共享記憶體。
所屬標頭檔案:
返回值:
成功 :根據的操作返回不同的值 失敗 :返回-1
引數說明:
shmid :要控制的共享記憶體id。
cmd :要執行什麼樣的控制操作,如ipc_rmid表示刪除。
*buf :獲取linux中描述共享記憶體的shmid_ds結構,該引數基本不用。
2.5 獲取使用者輸入的字串
函式名:
fgets
函式原型: man fgets
char *fgets(char *s, int size, file *stream);
函式功能:
獲取使用者從鍵盤上的輸入的字串。
所屬標頭檔案:
返回值:
引數說明:
*s :獲取到的字串放到**。
size :要放入多大的字串。
*stream :從**獲取的字串。
2.6 複製字串
函式名:
strncpy
函式原型: man strncpy
char *strncpy(char *dest, const char *src, size_t n);
函式功能:
把乙個位址的字串複製到另乙個位址。
所屬標頭檔案:
返回值:
引數說明:
n :複製的字串大小。
3. 綜合例項
/* touch write.c */
#include
#include
#include
#include
#include
#include
#include
#define text_sz 2048
struct shared_user_st
;int main()
//2.對映共享記憶體
shared_stuff = (struct shared_user_st *)shmat(shmid, null, 0);
//3.迴圈獲取使用者輸入字串並放入共享記憶體
while(running)
fgets(buffer, text_sz, stdin);
strncpy(shared_stuff->some_text, buffer, text_sz);
shared_stuff->written_by_you = 1;
if(0 == strncmp(buffer, "end", 3))
}//4.脫離共享記憶體
shmdt((const void *)shared_stuff);
return 0;
}/* touch read.c */
#include
#include
#include
#include
#include
#include
#include
#define text_sz 2048
struct shared_user_st
;int main()
//2.對映共享記憶體
shared_stuff = (struct shared_user_st *)shmat(shmid, null, 0);
shared_stuff->written_by_you = 0;
//3.迴圈列印共享記憶體
while(running)
if(0 == strncmp(shared_stuff->some_text, "end", 3))
}//4.脫離共享記憶體
shmdt((const void *)shared_stuff);
//5.刪除共享記憶體
shmctl(shmid, ipc_rmic, 0);
return 0;
}
程序通訊 共享記憶體
定義 共享記憶體,就是通過核心操作,在記憶體上開闢一塊供多個程序共同訪問的記憶體塊。這塊記憶體塊的建立和 銷毀是由核心來控制 當然,也可以在程序內部呼叫系統庫函式來建立和銷毀,類似於訊息機制和訊號 量機制 在這個記憶體塊上,程序可以像操作記憶體一樣操作共享區記憶體。作用 第乙個,就是提供程序間大資訊...
程序通訊共享記憶體
共享記憶體是允許多個程序共享記憶體 共享記憶體結構 struct shmid ds struc ipc permshm perm 指向該記憶體指標 int shm segsz 共享記憶體的大小 ushort shm lkcnt 共享記憶體被鎖定的時間 pid t shm cpid 最近呼叫shomp...
linux通訊 共享記憶體
共享記憶體是效率最高的程序間通訊方式 程序可以直接讀寫記憶體,不需要任何資料的拷貝。多個程序共享一段記憶體,因此與需要依靠某種同步機制,如互斥鎖和訊號燈等。建立開啟共享記憶體 shmget share memory get 對映共享記憶體 shmat share memory attach 撤銷共享...