Day 4.进程间的通信:管道和通信

进程间的通信

1.管道

2.信号

3.消息队列

4.共享内存

5.信号灯

6.套接字

1.管道(一次读4k,一共能读16次)64k

1.无名管道

无名管道只能用于具有亲缘关系的进程间的通信

pipe

int pipe(int pipefd[2]);

功能:创建一个无名管道

参数:

pipefd[0]:读管道文件描述符

pipefd[1]:写管道文件描述符

返回值:成功返回0;失败返回-1。

示例:

#include "head.h"

int main(void) 
{
	pid_t tid;
	int fd[2];      //定义一个管道标志符类型的数组
	int ret = 0;
	char tempuff[1024] = {0};

	ret = pipe(fd);   //创建一个无名管道
	if (ret == -1) 
	{
		perror("fail to pipe");
		return -1;
	}

	tid = fork();
	if (tid == -1)
	{
		perror("fail to fork");
		return -1;
	}

	if (tid == 0)
	{
		strcpy(tempuff,"hello world!");    //将内容拷贝到数组中
		write(fd[1],tempuff,strlen(tempuff));     //在子进程中将数组的内容写的方式到写到管道中
	}
	if (tid > 0)
	{
		read(fd[0],tempuff,sizeof(tempuff));     //在父进程中以读的方式从管道中读出内容放到数组中
		printf("tempuff=%s\n",tempuff);    //打印读到数组的内容
	}

	close(fd[0]);
	close(fd[1]);     //关闭两个管道标识符

	return 0;
}
linux@ubuntu:~/c/软件编程/线程/20240228-3$ ./a.out
tempuff=hello world!


如上所示:这样就能通过管道的方式进行进程间的通信,在子进程中往数组写入内容,在父进程中打印出来
无名管道特性:
1)管道中至少有一个写端

  读区数据时,如果管道中有数据直接读取,管道中没有数据阻塞等待直到有数据写输入读出,继

续向后执行。

2)管道中没有写端

  读取数据时,如果管道有数据直接读取,管道中没有数据不阻塞等待直接向下执行。

3)管道中至少有一个读端

  写入数据时,如果管道没有存满(64k),则直接写入,管道中如果存满,则阻塞等待直到有数

据读出,才能继续写入。

4)管道中没有读端

  写入数据时会导致管道破裂,导致程序崩溃。

2.有名管道

打开管道文件——>读写管道文件 -> 关闭管道文件

注意:有名管道必须读写两端同时加入才能继续向下执行

清除刷新数组函数:memset(数组名,0,数组大小)  0表示:数组置为0

mkfifo

 int mkfifo(const char *pathname, mode_t mode);

功能:创建一个管道文件

参数:

pathname:管道文件路径

mode:权限

返回值:成功返回0;失败返回-1。

练习:

编写两个进程,A B  A给B发送一条消息,B接收到打印后再给A回复一条消息

2.信号

信号用来实现内核层和用户层信息的交互,也可以用来实现进程间的通信

1.信号的种类:

kill -l

1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX

2.信号的处理方式:

1)缺省:按系统默认的方式处理

2)忽略:不响应信号(忽略他)

3)捕捉:按照自定义方式处理信号

  9号信号SIGKILL、19号信号SIGSTOP:这两个信号不能被忽略和捕捉

  以下三个信号可以从键盘输入:

  SIGINT:ctrl + c

  SIGQUIT:ctrl + \

  SIGTSTP:ctrl + z

 3.signal 

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

功能:

改变信号的处理方式

参数:

signum:信号的编号

handler:信号的处理方式

SIG_IGN     忽略处理

SIG_DFL     缺省处理

函数首地址   捕捉处理

返回值:

成功返回之前处理函数的首地址

失败返回SIG_ERR 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/415178.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云原生高级第一次作业

目录 实验需求: 第一个实验步骤: openEuler 二进制方式安装MySQL 8.0.x 1.首先需要获取软件包 2.然后安装tar和xz格式可进行解压工具 3.接下来就是安装MySQL 4.配置环境变量 5.登入并修改密码 6.停止服务脚本 7.提供配置文件 8.进入/etc/my.cnf…

如何利用动态代理IP进行海外社媒推广?

动态代理IP,顾名思义,是一种可以动态变化的IP地址。与传统的静态IP地址不同,动态代理IP在每次网络请求时都能提供一个新的IP地址。在进行海外推广活动时,它的应用非常关键。 动态代理IP的工作原理基于一个庞大的IP地址池。当用户…

IPD(集成产品开发)—核心思想

企业发展到一定阶段就会遇到管理瓶颈,IPD流程是一种高度结构化的产品开发流程,它集成了业界很多优秀的产品开发方法论,像搭积木一样的组合成一种非常有效的流程。如果我们能根据企业的规模和行业特点,对全流程的IPD进行合适的裁剪…

代码随想录刷题笔记-Day25

1. 分割回文串 131. 分割回文串https://leetcode.cn/problems/palindrome-partitioning/ 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xf…

端智能:面向手机计算环境的端云协同AI技术创新

近年来,随着移动端设备软硬件能力的进步,移动端的算力有了很大提升,同时面向移动端的机器学习框架和模型轻量化技术越来越成熟,端上的AI能力逐渐进入大众视野,端智能在电商领域也开始逐步走向规模化应用。通过持续探索…

动态规划之解码方法【LeetCode】

动态规划之解码方法 91. 解码方法解法1解法2 91. 解码方法 91. 解码方法 解法1 状态表示(这是最重要的):dp[i]表示以第i个字符为结尾,解码方法的总数。 状态转移方程(最难的):根据最近的一步来…

故障诊断 | 一文解决,PSO-BP粒子群算法优化BP神经网络模型的故障诊断(Matlab)

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,PSO-BP粒子群算法优化BP神经网络模型的故障诊断(Matlab) 粒子群优化算法(Particle Swarm Optimization, PSO)是一种群体智能优化算法,用于求解优化问题。BP神经网络是一种用于模…

【机器学习】线性回归模型(Linear Regression)

🌸博主主页:釉色清风🌸文章专栏:机器学习🌸今日语录:温柔的一半是知识,没有知识的涵养撑不起你想要的风骨。 ☘️0文章预览 本系列文章主要是根据吴恩达老师的机器学习课程以及自己的理解整合而成&#xf…

【MySQL】基本查询(表的增删改查)-- 详解

CRUD:Create(创建),Retrieve(读取),Update(更新),Delete(删除)。 一、Create insert [into] table_name [(column [, column] ...)] v…

2月28日做题总结(C/C++真题)

今天是2月28日,做题第三天。道阻且长,行则将至;行而不辍,则未来可期! 第一题 static char a[2]{1,2,3};说法是否正确? A---正确 B---错误 正确答案:B 解析:数组定义时&#xf…

Linux系统——Nginx拓展

目录 一、重写功能——rewrite 1.if 1.1 if 2. return 2.1状态码301和302的区别 301 302 3. set 4. break 5. rewrite 5.1 rewrite flag使用 5.2 flag说明 5.3举例 5.3.1访问 bj 跳转 beijing 5.3.2举例——break 5.3.3 http 转 https 5.3.4 break 与 last …

JavaScript 进阶03

编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用 面向对象 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。 在面向对象程序开发思想中&a…

kali安装ARL灯塔(docker)

1、root身份进入容器 ┌──(root㉿Kali)-[~/桌面] └─# su root ┌──(root㉿Kali)-[~/桌面] └─# docker 2、先更新再克隆 ┌──(root㉿Kali)-[~/桌面] └─# apt-get update …

如何在windows系统部署Lychee网站,并结合内网穿透打造个人云图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站,可以看做是云存储的一部分,既可…

蓝桥杯-常用STL(三)

常用STL 🎈1.映射🎈2.map的基础使用🔭2.1引入库🔭2.2构造一个映射🔭2.3插入一对映射🔭2.4判断关键字是否存在🔭2.5遍历映射🔭2.6清空 🎈1.映射 🔎映射是指两个…

xss.haozi.me靶场练习

靶场地址alert(1) 1、第一关 输入在文本框里面,我们闭合前面的标签,中间的内容我们就可以随意写了 2、第二关 逃逸value的属性即可,这里使用点击事件触发xss 3、第三关 看代码,使用了正则表达式,去掉了所有的括号字…

Apache POl

介绍 Apache POl是一个处理Miscrosoft Ofice各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作,一般情况下,POI都是用于操作 Excel 文件。 Apache POl 的应用场景 1.银行网银系统导出交易…

如何正确清除电脑的缓存垃圾?终于明白了!

前言 新的电脑总是好的,各种干净整洁无垃圾。 使用了一段时间之后,小伙伴们就会发现电脑C盘飙红了。然后就各种论坛查找清除电脑垃圾的方法。 电脑正常使用下,是会产生很多缓存的,所以C盘红了也很正常。除非电脑组装之后不开机&a…

如何做代币分析:以 TRX 币为例

作者:lesleyfootprint.network 编译:cicifootprint.network 数据源:TRX 代币仪表板 (仅包括以太坊数据) 在加密货币和数字资产领域,代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数据…

量子算法入门—4.量子比特与量子门(1)

1.量子比特 经典比特和量子比特 经典比特只有0、1两种取值,非黑即白,有n位即 2 n 2^n 2n种可能量子比特使用0、1的量子态描述量子比特的状态,可以通过线性组合形成新的量子态,就像光谱可以调节成分 引入线代记法,0、…