共享内存练习

打印 上一主题 下一主题

主题 1708|帖子 1708|积分 5124

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
设计两个历程,历程A申请一块共享内存,并向内存中写入数据,历程B从共享内存中读取数据并输出
  1. /********************************************************************************
  2. *
  3. *
  4. * 共享内存练习
  5. * author:jindouliu2024@163.com
  6. * date:2025.5.8
  7. *
  8. * Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
  9. * *****************************************************************************/
复制代码
  1. //进程A
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <sys/wait.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <errno.h>
  11. #include <time.h>
  12. #include <sys/ipc.h>
  13. #include <sys/stat.h>
  14. #include <unistd.h>
  15. #include <sys/ipc.h>
  16. #include <sys/shm.h>
  17. int main()
  18. {
  19.         //设置键值
  20.         key_t key = ftok(".",2);
  21.         //创建一块共享内存空间
  22.         int shm_id = shmget(key,256,IPC_CREAT|IPC_EXCL|0644);
  23.         if(shm_id == -1){
  24.                 printf("shmget error\n");
  25.                 return 1;
  26.         }
  27.         //连接映射空间,并写入数据
  28.         char *shm_map = (char *)shmat(shm_id,NULL,0);
  29.         sprintf(shm_map,"this is shm_a process,id = %d\n",getpid());
  30.         while(1);
  31.         return 0;
  32. }
复制代码
  1. //进程B
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <sys/wait.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <errno.h>
  11. #include <time.h>
  12. #include <sys/ipc.h>
  13. #include <sys/stat.h>
  14. #include <unistd.h>
  15. #include <sys/ipc.h>
  16. #include <sys/shm.h>
  17. int main()
  18. {
  19.         //设置键值
  20.         key_t key = ftok(".",2);
  21.         //创建一块共享内存空间
  22.         int shm_id = shmget(key,256,IPC_CREAT|IPC_EXCL|0644);
  23.         if(shm_id == -1){
  24.                 printf("shmget error\n");
  25.                 shm_id = shmget(key,256,0644);
  26.                
  27.         }
  28.         //连接映射空间,并读取数据
  29.         char *shm_map = (char *)shmat(shm_id,NULL,0);
  30.         printf("%s\n",shm_map);
  31.         //解除映射
  32.         shmdt(shm_map);
  33.         return 0;
  34. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表