首页 > 后端开发 > php教程 > Linux --进程间通信--共享内存

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

黄舟
发布: 2023-03-04 22:40:01
原创
1946 人浏览过

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

二、 ipcs -m 查看共享内存
ipcrm -m 删除共享内存

三、主要函数
shmget 创建

shmctl 删除

shmat 挂接

shmdt 取消挂接

********* man 函数名 查看*****
四、代码实现
comm.h

1

2

3

4

5

6

7

8

9

10

11

12

13

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 ]=&#39;A&#39;; 

 10         addr[i+1]=&#39;\0&#39;; 

 11         sleep(1); 

 12     }    

 13     delete_Shm(addr); 

 14     return 0; 

 15 }

登录后复制

server.c

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 }

登录后复制

运行结果

324.jpg

以上就是Linux --进程间通信--共享内存的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板