300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Linux --进程间通信--共享内存

Linux --进程间通信--共享内存

时间:2024-05-19 09:02:49

相关推荐

Linux --进程间通信--共享内存

一、共享内存

共享内存是最高效的通信方式,因为不需要一个进程先拷贝到内核,另一个进程在存内核中读取。

二、 ipcs -m 查看共享内存

ipcrm -m 删除共享内存

三、主要函数

shmget 创建

shmctl 删除

shmat 挂接

shmdt 取消挂接

********* man 函数名 查看*****

四、代码实现

comm.h

1#pragmaonce2#include<stdio.h>3#include<stdlib.h>4#include<unistd.h>5#include<sys/ipc.h>6#include<sys/shm.h>7#define_PATH_"."8#define_PROJID_0x6669#define_SHM_SIZE_409610intgetShmget();11intdestoryShm(intshm_id);12char*at_shm(intshm_id);13intdelete_Shm(char*addr);

comm.c

1#include"comm.h"2intgetShmget()3{4key_tkey=ftok(_PATH_,_PROJID_);56intshmflg=IPC_CREAT|0666;7intshm_id=shmget(key,_SHM_SIZE_,shmflg);8if(shm_id<0)9{10perror("shmget");11return-1;12}13returnshm_id;14}1516intdestoryShm(intshm_id)17{18returnshmctl(shm_id,IPC_RMID,NULL);19}char*at_shm(intshm_id)22{23return(char*)shmat(shm_id,NULL,0);24}25intdelete_Shm(char*addr)26{27returnshmdt(addr);28}

client.c

1#include"comm.h"2intmain()3{4intshm_id=getShmget();5char*addr=at_shm(shm_id);6inti=0;7for(;i<_SHM_SIZE_;i++)8{9addr[i]='A';10addr[i+1]='\0';11sleep(1);12}13delete_Shm(addr);14return0;15}

server.c

1#include"comm.h"2intmain()3{4intshm_id=getShmget();5char*addr=at_shm(shm_id);6inti=0;7for(;i<_SHM_SIZE_;i++)8{9printf("%s\n",addr);10sleep(1);11}12delete_Shm(addr);13destoryShm(shm_id);14return0;15}

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。