您好,欢迎访问一九零五行业门户网

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

一、共享内存
共享内存是最高效的通信方式,因为不需要一个进程先拷贝到内核,另一个进程在存内核中读取。
二、 ipcs -m 查看共享内存
ipcrm -m 删除共享内存
三、主要函数
shmget 创建
shmctl 删除
shmat 挂接
shmdt 取消挂接
********* man 函数名 查看*****
四、代码实现
comm.h
1 #pragma once 2 #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_ 0x666 9 #define _shm_size_ 4096 10 int getshmget(); 11 int destoryshm(int shm_id); 12 char* at_shm(int shm_id); 13 int delete_shm(char *addr);
comm.c
1 #include"comm.h" 2 int getshmget() 3 { 4 key_t key=ftok(_path_,_projid_); 5 6 int shmflg=ipc_creat |0666; 7 int shm_id=shmget(key,_shm_size_,shmflg); 8 if(shm_id<0) 9 { 10 perror("shmget"); 11 return -1; 12 } 13 return shm_id; 14 } 15 16 int destoryshm(int shm_id) 17 { 18 return shmctl(shm_id,ipc_rmid,null); 19 } 20 21 char* at_shm(int shm_id) 22 { 23 return (char*)shmat(shm_id,null,0); 24 } 25 int delete_shm(char *addr) 26 { 27 return shmdt(addr); 28 }
client.c
1 #include"comm.h" 2 int main() 3 { 4 int shm_id=getshmget(); 5 char *addr=at_shm(shm_id); 6 int i=0; 7 for(;i<_shm_size_;i++) 8 { 9 addr[i ]='a'; 10 addr[i+1]='\0'; 11 sleep(1); 12 } 13 delete_shm(addr); 14 return 0; 15 }
server.c
1 #include"comm.h" 2 int main() 3 { 4 int shm_id=getshmget(); 5 char * addr=at_shm(shm_id); 6 int i=0; 7 for(;i<_shm_size_;i++) 8 { 9 printf("%s\n",addr); 10 sleep(1); 11 } 12 delete_shm(addr); 13 destoryshm(shm_id); 14 return 0; 15 }
运行结果
以上就是linux --进程间通信--共享内存的内容。
其它类似信息

推荐信息