linux共享内存程序,Linux --进程间通信--共享内存

一、共享内存

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

二、 ipcs -m 查看共享内存

ipcrm -m 删除共享内存

三、主要函数

shmget 创建

shmctl 删除

shmat 挂接

shmdt 取消挂接

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

四、代码实现

comm.h1 #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.c1 #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.c1 #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_>

8     {

9         addr[i ]='A';

10         addr[i+1]='\0';

11         sleep(1);

12     }

13     delete_Shm(addr);

14     return 0;

15 }

server.c1 #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_>

8     {

9         printf("%s\n",addr);

10         sleep(1);

11     }

12     delete_Shm(addr);

13     destoryShm(shm_id);

14     return 0;

15 }

运行结果

cc0d2b34013869f01f9be2c5781e28c9.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值