多进程实现共享内存的简单通信
发布日期:2021-05-10 23:39:11 浏览次数:27 分类:精选文章

本文共 1748 字,大约阅读时间需要 5 分钟。

进程间共享内存示例

更多资料请点击:更多信息请访问我们的技术中文文档

进程1:共享内存服务器端

#include 
#include
#include
#include
#include
#include
#include
#include
int id;char *p;void finish() { shmdt(p); // 解除共享内存映射 shmctl(id, IPC_RMID, NULL); // 删除共享内存 printf("成功退出程序!\n"); exit(0);}int main() { signal(SIGINT, finish); // 终止信号处理 int key = ftok("/home/jiajia", 900); // 通过ftok函数申请一个键值 id = shmget(key, 2048, IPC_CREAT|IPC_EXCL|0777); //申请共享内存的ID if (id == -1) { if (errno == EEXIST) { id = shmget(key, 2048, 0777); // 如果共享内存已存在,直接打开 } else { perror("申请失败!\n"); return -1; } } p = shmat(id, NULL, 0); // 映射共享内存为内存区域 bzero(p, 2048); // 清空共享内存 while (1) { printf("p1输入:"); scanf("%s", p); // 往共享内存输入内容 }}

进程2:共享内存客户端

#include 
#include
#include
#include
#include
#include
#include
#include
int id;char *p;void finish() { shmdt(p); // 解除共享内存映射 shmctl(id, IPC_RMID, NULL); // 删除共享内存 printf("成功退出程序!\n"); exit(0);}int main() { signal(SIGINT, finish); // 终止信号处理 int key = ftok("/home/jiajia", 900); // 通过ftok函数申请一个键值 id = shmget(key, 2048, IPC_CREAT|IPC_EXCL|0777); //申请共享内存的ID if (id == -1) { if (errno == EEXIST) { id = shmget(key, 2048, 0777); // 如果共享内存已存在,直接打开 } else { perror("申请失败!\n"); return -1; } } p = shmat(id, NULL, 0); // 映射共享内存为内存区域 bzero(p, 2048); // 清空共享内存 while (1) { if (strlen(p) != 0) { printf("p2输出:%s\n", p); // 输出共享内存内容 bzero(p, 2048); // 输出后再次清空 } }
上一篇:互斥锁应用实例
下一篇:多线程设置静态优先级

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月26日 13时18分47秒