亲缘进程、非亲缘进程-共享内存与信号
亲缘进程 共享内存与信号
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <signal.h>char *share_memory = NULL;void print() {printf("<parent> : %s\n", share_memory);
}int main() {pid_t pid;int shmid;key_t key = ftok(".", 198);if ((shmid = shmget(key, 4096, IPC_CREAT | 0666)) < 0) {perror("shmget");return 1;}if ((share_memory = shmat(shmid, NULL, 0)) < 0) {perror("");return 1;}if ((pid = fork()) < 0) {perror("fork");return 1;}if (pid == 0) {while (1) {printf("<child> : ");scanf("%[^\n]s", share_memory);getchar();kill(getppid(), SIGUSR2);}}else {while (1) {signal(SIGUSR2, print);}}return 0;
}
非亲缘进程 共享内存与信号
client
#include<sys/shm.h>
#include<sys/ipc.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
#include<errno.h> struct Msg {int pid;char buff[100];
};struct Msg *share_memory = NULL;int main() {int shmid;char buf[50];pid_t pid = getpid();key_t key = ftok(".", 198);if ((shmid = shmget(key, 4096, IPC_CREAT | 0666)) < 0) {perror("shmget");return 1;}if ((share_memory = shmat(shmid, NULL, 0)) < 0) {perror("");return 1; }pid = share_memory->pid;while (1) {printf("<1>:");scanf("%[^\n]s", share_memory->buff);getchar();kill(pid, SIGUSR2);}return 0;
}
server
#include<sys/shm.h>
#include<sys/ipc.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
#include<errno.h> struct Msg {int pid;char buff[100];
};struct Msg *share_memory = NULL;void print() {printf("<2>:%s\n", share_memory->buff);
}int main() {int shmid;pid_t pid = getpid();key_t key = ftok(".", 198);if ((shmid = shmget(key, 4096, IPC_CREAT | 0666)) < 0) {perror("shmget");return 1;}if ((share_memory = shmat(shmid, NULL, 0)) < 0) {perror("");return 1; }share_memory->pid = pid;while (1) {signal(SIGUSR2, print);}return 0;
}
亲缘进程、非亲缘进程-共享内存与信号相关推荐
- 进程间的通信——共享内存
下面将讲解进程间通信的另一种方式,使用共享内存. 一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式 ...
- 进程间的通信方式(管道,消息队列,共享内存,信号)
目录 了解 使用管道来通信 无名管道 有名管道 消息队列 key 键值生成 共享内存 信号 信号概述 信号如何携带消息 信号发送函数: 信号量 了解 创建进程后实现父子通讯的连接. 我们希望有一个管道 ...
- 进程之间的通信方式-共享内存
共享内存是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.原理图如下: 共享内存的实现分 ...
- Linux进程间通信(管道、消息队列、共享内存、信号、信号量)
目录 Linux进程间通信概述 1.管道 无名管道(pipe) 有名管道(fifo) 2.消息队列(msg) 消息队列的通信原理 消息队列相关api 消息队列收发数据 键值生成 消息队列移除 3.共享 ...
- Linux系统中消息队列,共享内存、信号和线程的基本操作使用方法
Linux系统中消息队列,共享内存.信号和线程高级操作 第十一章 消息队列 10.1消息队列定义 10.2 消息队列特点 10.3 key值 10.4 创建消息队列 10.4.1 发送消息 10.4. ...
- 基于共享内存、信号、命名管道和Select模型实现聊天窗口
基于共享内存.信号.命名管道和Select模型实现聊天窗口 问题模型 A.B两个进程通过管道通信,A 进程每次接收到的数据通过共享内存传递给A1进程显示,同理,B进程每次接收到的数据通过共享内存传递给 ...
- 删除共享内存_进程通信专题之 共享内存
什么是共享内存呢? 共享内存是被多个进程共享一部分物理内存,共享内存是进程间共享数据最快的办法,因为一个进程向共享内存中写了数据,那么共享的这个区域的所有进程就可以立刻看到这里的数据. 共享内存有什么 ...
- 进程间通信IPC(二)(共享内存、信号、信号量)
共享内存: 共享内存就是允许两个或多个进程共享一定的存储区.就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针.当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更 ...
- Linux——进程间通信大汇总!(概述、管道通信、消息队列、共享内存、信号、信号量)
目录 一.进程间通信概述 1.概述 2.进程间通信的目的 3.进程间通信机制
最新文章
- 微信小程序从oracle取数,微信小程序 取随机数
- nginx负载均衡高可用
- 【译】How Microsoft Lost the API War
- POJ 2263 floyd思想
- MySQL安装失败问题
- Express接口综合案例(创建项目、配置常用中间件、路由设计、提取控制器模块、配置错误统一处理中间件、用户注册的数据验证,密码加密)
- 游戏服务器高性能负载均衡,游戏服务器高可用负载均衡
- Mint14体验报告 接近Windows的Linux
- PHP系统学习3 正则
- 关于Decorator模式
- xvid-core1.1.2编译方法(vc6,vs2005)
- Linux C代码获取天气情况
- 傅里叶分析斯坦恩中文版pdf_傅里叶分析
- 毕竟,连少宇都无法击败的人,是没有资格做自己的对手的
- C++成员变量指针和成员函数指针
- 计算机二本院校排名民办河北,2018河北二本大学排名
- 应用编程与裸机编程、驱动编程的区别(Linux应用编程篇)
- 【游戏开发】按键精灵写《新天龙八部》脚本——人物自动打怪加血加蓝宠物加血
- 语文七年级计算机作文,我从电脑游戏中学到了语文初一作文
- ASRT语音识别项目
热门文章
- 从前慢-MySql高级
- python学习——绘制loss、acc学习曲线
- 快速提高网站流量的外部链接发布与推广技巧
- 安发生物|醒醒吧!不吃晚饭=增肥!来听听钟南山院士的建议......
- IDM - 如何去除浏览器下载浮动条?
- 【云原生利器之Cilium】什么是Cilium
- Learning-based feature matching and pose estimation
- 标志寄存器df_标志寄存器
- java连连看代码_java实现连连看游戏
- 基于电流型磁链观测器的异步电机矢量控制学习