内存共享
前提:基于Linux系统的学习
共享内存
1 获取键值 ftok(3)
2 使用shmget(2)向系统申请共享内存段的id.
3 将共享内存段关联到进程 shmat(2)
4 内存的操作
5 解除共享内存段和进程的关联 shmdt(2)
//shm_w.c #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <sys/ipc.h> #include <string.h> int main(){ //获取键值 ftok key_t key=ftok(".", 23); if(key==-1){ perror("ftok"); return -1; } //向系统申请共享内存段id, shmget int id=shmget(key,1024,IPC_CREAT|0644); if(id==-1){ perror("shmget"); return -1; } //将共享内存段关联到进程 shmat void* shm_p=shmat(id,NULL,0); if(shm_p==(void*)-1){ perror("shmat"); return -1; } //内存的操作 strcpy((char*)shm_p,"hector hahah\n"); //解除共享内存段和进程的关系 shmdt shmdt(shm_p); return 0; }
//shm_r.c #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <sys/ipc.h> #include <string.h> int main(){ //获取键值 ftok key_t key=ftok(".", 23); if(key==-1){ perror("ftok"); return -1; } //向系统申请共享内存段id, shmget int id=shmget(key,1024,IPC_CREAT|0644); if(id==-1){ perror("shmget"); return -1; } //将共享内存段关联到进程 shmat void* shm_p=shmat(id,NULL,0); if(shm_p==(void*)-1){ perror("shmat"); return -1; } //内存的操作 puts((char*)shm_p); //解除共享内存段和进程的关系 shmdt shmdt(shm_p); return 0; }