时间:2021-07-01 10:21:17 帮助过:26人阅读
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 --进程间通信--共享内存的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!