一、共享記憶體
1、獲取乙個鍵值 ftok(3)
2、使用鍵值獲取共享記憶體的id shmget(2)
#include
#include
int shmget(key_t key, size_t size, int shm***);
引數:key:ftok(3)的返回值
size:指定共享記憶體段的尺寸
shm***:
mode:指定共享記憶體段的許可權
返回值:-1 錯誤 errno被設定
成功 返回共享記憶體段的id
編寫**建立乙個共享記憶體段,獲取該記憶體段的id(shmget.c)
#include
#include
#include
#include
int main(void)
printf("key=0x%x\n",key);
//獲取shmid
int shmid = shmget(key, 1024, ipc_creat|0664);
if(shmid == -1)
printf("shmid=0x%x\n", shmid);
return
0; }
tarena@ubuntu:~/day/day34$ a.out
key=0x1f08241a
shmid=0x10001
tarena@ubuntu:~$ ipcs -m
------ shared memory segments --------
key shmid owner perms bytes nattch status
0x00000000
0 tarena 600
393216
2 dest
0x1f08241a
65537 tarena 664
1024
03、將共享記憶體關聯到程序的虛擬位址空間shmat(2)
#include
#include
void *shmat(int shmid, const
void *shmaddr, int shm***);
引數:shmid:指定了共享記憶體段的id
shm***:
shm_rdonly:共享記憶體段唯讀
0:可都可寫
錯誤 (void *) -1 errno被設定
4、向記憶體讀寫資料
5、解除程序的虛擬位址到共享記憶體的關聯shmdt(2)
#include
#include
int shmdt(const
void *shmaddr);
引數:返回值:成功 0
錯誤 -1 errno被設定
舉例:使用共享記憶體段實現程序間的通訊(shma.c shmb.c)
shma.c:
#include
#include
#include
#include
int main(void)
printf("key=0x%x\n",key);
int shmid = shmget(key, 1024, ipc_creat|0664);
if(shmid == -1)
void *p = shmat(shmid, null, 0);
if(p == (void*)-1)
*((int*)p) = 321;//p的訪問方式由void*轉換為int*
//解除關聯
shmdt(p);
printf("shmid=0x%x\n", shmid);
return
0; }
命令: tarena@ubuntu:~/day/day34$ a
結果: key=0x1f08241a
shmid=0x10001
shmb.c:
#include
#include
#include
#include
int main(void)
printf("key=0x%x\n",key);
int shmid = shmget(key, 1024, ipc_creat|0664);
if(shmid == -1)
void *p = shmat(shmid, null, 0);
if(p == (void*)-1)
printf("%d\n",*((int*)p));
//解除關聯
shmdt(p);
printf("shmid=0x%x\n", shmid);
return
0; }
命令: tarena@ubuntu:~/day/day34$ b
結果: key=0x1f08241a
321 shmid=0x10001
分析:共享記憶體中,在取出資料後,記憶體中還有資料,只能覆蓋不能移除,和訊息佇列不太一樣
C語言 unix c 動態載入
動態載入 在程式中根據程式的需要,動態載入某個庫函式,這種行為稱為動態載入,系統為實現動態載入提供了一下函式 man 3 dlopen顯示幫助 標頭檔案 include void dlopen const char filename,int flag 引數 filename 制定了動態庫的檔案名字 ...
C語言 unix c 訊號基礎
二 訊號的基礎 1 什麼是訊號 訊號就是 軟中斷 軟中斷就是軟體模擬的中斷機制。2 中斷是什麼 正常的執行流程,訊號處理程式是兩條執行路線,但是屬於同乙個程序 3 系統為我們提供了哪些訊號?kill l 察看系統的中斷 64個訊號,32,33沒有 tarena ubuntu kill l 1 sig...
python 使用共享記憶體 c語言構建記憶體
測試環境 centos7 python3.6.5 首先使用c建立記憶體,這裡的方法是 作為引數讀乙個二進位制資料檔案進去,把檔案的內容作為共享記憶體的內容 定義塊 include include include int main int argc,char ar if argc 2 id shmge...