有名管道 | 信号

news2024/11/17 1:33:51

匿名管道由于没有名字,只能用于具有亲缘关系的进程间通信。

为了克服这个缺点,就提出了有名管道(FIFO),也称为命名管道FIFO文件

有名管道

FIFO在文件系统中作为一个特殊的文件而存在并且在文件系统中可见,所以有名管道可以实现不相关进程间通信,但FIFO中的内容却存放在内存中。

1. 创建有名管道
  • 方式1:可以使用命令创建有名管道:
$ mkfifo 名字
  • 方式2:使用函数mkfifo()函数创建有名管道
  • 参数说明:
    • pathname:管道名称的路径;
    • mode:FIFO的权限,和open是一样的;如0666;
  • 返回值:成功返回0,失败返回-1,并设置对应的errno;

使用mkfifo()创建了FIFO后,就可以使用open()打开它,常见的文件I/O函数都可以用于FIFO。

2.特点:

a.存在于内存中

b.在系统中有一个对应名称。

c.文件大小为0bytes

d.可以用于任何进程间通信。

e.管道文件都不支持定位操作,如:lseek、fseek。

f.有名管道操作也符合前面管道的操作特点。

a.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(int argc, const char *argv[])
{

	if (argc != 2)
	{
		printf("Usage: %s <filename>\n",argv[0]);
		return -1;
	}

	if (mkfifo(argv[1],0666) < 0 && errno != EEXIST)
	{
		perror("mkfifo fail");
		return -1;
	}
	printf("----mkfifo -- success\n");

	int fd = open(argv[1],O_WRONLY);
	//int fd = open(argv[1],O_RDWR);
	if (fd < 0)
	{
		perror("open fail");
		return -1;
	}

	printf("----open success---\n");
	
	//从键盘输入数据 写到 管道中 

	char buf[1024];
	
	while (1)
	{
		fgets(buf,sizeof(buf),stdin);
		write(fd,buf,strlen(buf)+1);

		if (strncmp(buf,"quit",4) == 0)
		{
			remove(argv[1]);
			close(fd);
			break;
		}
	}

	return 0;
}

b.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(int argc, const char *argv[])
{

	if (argc != 2)
	{
		printf("Usage: %s <filename>\n",argv[0]);
		return -1;
	}

	if (mkfifo(argv[1],0666) < 0 && errno != EEXIST)
	{
		perror("mkfifo fail");
		return -1;
	}
	printf("----mkfifo -- success\n");

	int fd = open(argv[1],O_RDONLY);
//	int fd = open(argv[1],O_RDWR);

	if (fd < 0)
	{
		perror("open fail");
		return -1;
	}

	printf("----open success---\n");
	
	//从管道中读数据 
	char buf[1024];
	while (1)
	{
		read(fd,buf,sizeof(buf));
		printf("buf = %s",buf);

		if (strncmp(buf,"quit",4) == 0)
		{
			remove(argv[1]);
			close(fd);
			break;
		}
	}
	return 0;
}

信号


1、概念:


(1)信号是进程间通信的方式之一,这种方式不能传输数据,只是在内核中传递一个信号(整数),信号表示一个整数。

(2)不同信号的值所代表的信号不同。

(3)允许用户自定义信号,自定义信号的含义由程序员自行定义,但是信号值不允许和系统默认拥有的信号值一样。

(4)软中断:异步通信方式,步调不一致。在软件层面类似于一个中断过程。

(5) 信号处理函数的注册函数  typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);
参数:int signum(信号编号)

sighandler_t handler(做怎样的处理或函数指针指向的信号处理函数)

2.常见信号:

3.收到信号的三种处理方式

(1)用户自定义: 通过将一个信号与用户自定义的处理函数关联起来,进程可以捕获并处理信号。当进程收到与已注册的处理函数关联的信号时,操作系统会调用相应的处理函数,允许程序员指定自定义的行为。

(2)默认行为: 对于大多数信号,操作系统定义了默认的行为。这些默认行为通常是终止进程,生成核心转储文件,或暂停进程执行等。当进程收到信号时,如果没有设置信号的自定义处理函数,将会执行操作系统默认的行为。

(3)忽略信号: 进程可以选择忽略某些信号,这意味着进程在收到该信号时不做任何动作。这通常用于对某些不需要处理的信号进行过滤,或者是在特定情况下暂时屏蔽某些信号的影响。

例:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8个最佳iMacros替代方案(2024)

iMacros作为一款经典的网页自动化工具&#xff0c;多年来帮助无数用户自动化了繁琐的网页任务。然而&#xff0c;随着技术的进步&#xff0c;越来越多功能更强大、界面更友好的替代方案涌现&#xff0c;为用户提供了更多选择。如果你正在寻找2024年最好的iMacros替代工具&#…

中国智能物流系统集成玩家图谱:很全

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 上海欣巴自动化科技股份有限公司 总部&#xff1a;上海服务行业&#xff1a;快递、电商、服装、零售、医药、食品饮料等解决方案&#xff1a;自动化分拣输送系统&#xff1b;控制软件…

linux下tomcat nio 底层源码调用系统函数处理流程

linux tomcat使用nio处理请求 调用jvm native C 底层调用系统函数源码原理 ##Acceptor接受socket socket endpoint.serverSocketAccept(); ##NioEndpoint serverSock.accept() ##ServerSocketChannelImpl n accept(this.fd, newfd, isaa); ##ServerSocketChannelImpl a…

Linux的安装和使用

Linux 第一节 Linux 优势 1. 开源 为什么这么多的的设备都选择使用 Linux&#xff1f;因为它是开源软件&#xff08;open source software&#xff09;&#xff0c;具有不同的含义。使用一个安全的操作系统工作变得必不可少的事&#xff0c;而 Linux 恰好满足了这个需求。因…

Golang | Leetcode Golang题解之第344题反转字符串

题目&#xff1a; 题解&#xff1a; func reverseString(s []byte) {for left, right : 0, len(s)-1; left < right; left {s[left], s[right] s[right], s[left]right--} }

vue3ts+element-plus实现点击el-select下拉选择内容填充和编辑内容

需求在填写报表时&#xff0c;既可以选择下拉选项&#xff0c;还可以编辑选的内容&#xff0c; 找了elementUi没有现成的就自己组装一个 效果&#xff1a; 贴代码&#xff1a; 在components下新建文件夹TextareaSelect&#xff0c;再新建index.vue和interface.ts &#xff08;…

AIGC创新应用技术实践:成都技术生态沙龙全回顾

AIGC创新应用技术实践&#xff1a;成都技术生态沙龙全回顾 2024年8月17日下午&#xff0c;我有幸作为CSDN校园主理人参加了在成都举办的AIGC创新应用技术实践沙龙活动。 此行也见到了许许多多的行业大佬&#xff0c;得到的收获非常之多&#xff0c;赶了1300公里的路&#xff0…

getActivePinia was called with no active Pinia

如果你是从vuex转向使用pinia&#xff0c;那么你可能遇到这个问题getActivePinia was called with no active Pinia. Did you forget to install pinia?。明明已经安装了pinia&#xff0c;为什么会有这个提示呢&#xff1f; 原因是你可能在setup的组件之外使用了useStore 根本…

JavaScript初级——运算符

一、算数运算符 1、运算符也叫操作符。通过运算符可以对一个或多个值进行运算&#xff0c;并获取运算结果。 比如&#xff1a;typeof 就是运算符&#xff0c;可以获得一个值的类型&#xff0c;他会将该值的类型以字符串的形式返回 &#xff08;number、string、boolean、undefi…

三防平板:现代生产效率与安全的革新者

三防加固工业平板电脑以其独特的防水、防尘、防摔性能&#xff0c;成为复杂生产环境下可靠的工作伙伴。无论是高温、高湿的恶劣环境&#xff0c;还是充满粉尘与振动的车间&#xff0c;三防平板电脑均能保持稳定运行&#xff0c;显著降低硬件故障率&#xff0c;确保生产线的平稳…

AI周报(8.11-8.17)

AI应用-小白&#xff0c;你在说什么呢&#xff1f;AI宠物翻译Traini Traini是由中国连续创业者孙邻家&#xff08;Arvin Sun&#xff09;和刘嘉懿&#xff08;Jack Liu&#xff09;于2022年在美国硅谷联合创立的全球宠物在线培训平台和宠物共情AI应用。Traini也在今年5月完成了…

MyBatis框架连接数据库-初级

MyBatis 的主要功能是帮助持久层管理数据库&#xff0c;接下来我们利用 MyBatis 连接一下我们的数据库&#xff0c;实现入门程序 前期准备 使用环境&#xff1a; jdk 17 maven 3.6.1 mybatis 3.5.10 mysql 8.0.31 idea 2021.1 需要准备&#xff1a; 一个 Maven 工程模块…

uniapp-部分文件中文乱码

一、问题 在开发时遇到&#xff0c;部分页面的中文显示乱码&#xff0c;如图 搜索了一下解决方法&#xff0c;这里记录一下 二、问题原因&#xff1a; 页面的编码格式不是 utf-8 造成的 三、解决方法 打开出现乱码页面选择编译器左上角的文件 > 以指定编码重新打开 选择U…

【存储学习笔记】4:快照(Snapshot)技术的实现方式

1 快照 1.1 动机 在上一篇《备份》里提到&#xff0c;热备份就是在执行操作时&#xff0c;服务器需要正常处理来自用户或应用对数据的更新&#xff0c;这样能够保证数据7*24小时可用&#xff08;在很多服务里这是必要的&#xff09;。 而热备份的困难就是如何保证数据的一致…

判断点B是否在线段AC上?

问题 判断点B是否在线段AC上&#xff1f; 解决方法 1).使用矩阵的秩解决 矩阵的秩代码 #include <iostream> #include <vector> #include <cmath>class Matrix { public:std::vector<std::vector<double>> data;int rows, cols;Matrix(int r,…

电子合同如何在线签?9大协助工具软件

文章介绍了以下几个工具&#xff1a;e签宝、上上签、契约锁、法大大、合同管家、Concord、爱签、微签、PandaDoc。 在选择合适的电子签名工具时&#xff0c;很多企业面临着如何确保合规、提高效率以及优化用户体验的挑战。市场上的众多选项使得决策过程变得更加复杂。但是&…

【Kubernetes】虚拟 IP 与 Service 的代理模式

虚拟 IP 与 Service 的代理模式 1.userspace 代理模式2.iptables 代理模式3.IPVS 代理模式 由于 Service 的默认发布类型是 ClusterlP&#xff0c;因此也可以把 ClusterIP 地址叫作 虚拟 IP 地址。在 Kubernetes 创建 Service 时&#xff0c;每个节点上运行的 kube-proxy 会自动…

百度地图SDK Android版开发 6 显示覆盖物

百度地图SDK Android版开发 6 显示覆盖物 前言地图类中覆盖物的接口覆盖物类Marker示例Polyline示例Polygon示例Arc示例Circle示例Text示例效果图 Marker的更多属性常用属性交互碰撞动画其它属性 折线的更多属性常用属性交互其它 多边形的更多属性常用属性交互其它 Arc的更多属…

keepalive原理详解及应用

目录 一、高可用集群 1.1 什么是keepalived 1.2 什么是VRRP协议 二、Keepalived 部署 2.1 keepalived 简介 2.2 keepalived 框架 2.3 实验环境搭建 2.4 Keepalived 安装 2.5 Keepalived 配置 2.5.1 虚拟路由配置 2.5.2 独立日志 2.5.3 独立子配置文件 三、Keepali…

Unity动画模块 之 3D Rig页签

​本文仅作笔记学习和分享&#xff0c;不用做任何商业用途本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ 1.Rig页签 Rig 选项卡 - Unity 手册&#xff0c;rig是设置骨骼与替身系统的&#xff0c;工作流程如下 Avatar是什么…