一、共享内存

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

二、 ipcs -m 查看共享内存

   ipcrm -m 删除共享内存

三、主要函数

    shmget 创建

    shmctl 删除

    shmat 挂接

    shmdt 取消挂接

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

四、代码实现

    comm.h

  1 #pragma once  2 #include
  3 #include
  4 #include
  5 #include
  6 #include
  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 }

运行结果