多语言展示
当前在线:934今日阅读:176今日分享:34

在Ubuntu14.04上如何创建共享内存

共享内存主要是一块独立于进程地址空间外的物理内存空间,可由一个进程创建,其他进程共同使用,共享内存是最快、效率最高的进程间的通讯方式;下面小编在Ubuntu14.04上创建共享内存,实现读写功能。
工具/原料
1

笔记本电脑;

2

Ubuntu14.04系统的虚拟机。

方法/步骤
1

共享内存的使用步骤: 1)创建:key_t key=ftok(PATH,proj); int shmid=shmget(key,SIZE,IPC_CREAT | 0600); 2)映射:paddr=shmat(shmid,NILL,0); 3)操作:利用内存操作函数; 4)断开:shmdt(paddr); 5)回收:shmctl(shmid,IPC_RMID,NULL);

2

用于写的代码:#include #include #include #include #include #include #include  #define KEY_PATH '/home/xxx' int main(){key_t key;key=ftok(KEY_PATH,1);printf('key:%#x\n',key);if(key < 0){perror('ftok');exit(-1);}int shmid;if(-1 == (shmid=shmget(key,64,IPC_CREAT | 0600)))//创建{perror('shmget');exit(EXIT_FAILURE);}// puts('创建共享内存成功!');printf('key:%d\n',shmid);char *padrr=(char *)shmat(shmid,NULL,0);//映射,要进行类型转换if(padrr == NULL){perror('shmat');exit(EXIT_FAILURE);}strcpy(padrr,'hello');shmdt(padrr);//断开     return 0;}

3

用于读的代码:#include #include #include #include #include #include #include  #define KEY_PATH '/home/xxx' int main(){key_t key;key=ftok(KEY_PATH,1);printf('key:%#x\n',key);if(key < 0){perror('ftok');exit(-1);}int shmid;if(-1 == (shmid=shmget(key,64,IPC_CREAT | 0600)))//创建{perror('shmget');exit(EXIT_FAILURE);}// puts('创建共享内存成功!');printf('key:%d\n',shmid);char *padrr=(char *)shmat(shmid,NULL,0);//映射,此处一定进行类型转换if(padrr == NULL){perror('shmat');exit(EXIT_FAILURE);}puts(padrr);shmdt(padrr);//断开shmctl(shmid,IPC_RMID,NULL);//回收    return 0;}

4

使用下面的命令编译:“gcc shm_r.c -o read”“gcc shm_w.c -o write”先运行写内存程序:命令:“./write”:

5

这里运行读内存程序:命令:“./read”:

注意事项

使用共享内存的优点:(1)最快,效率最高;(2)容量大; 缺点:造成同步问题。

推荐信息