进程的通信以及信号的学习

一,进程的通信:

     种类:1.管道  2.信号  3.消息队列  4.共享内存  5.信号灯  6.套接字

1.管道:

       1.无名管道

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

        pipe
        int pipe(int pipefd[2]);
        功能:
            创建一个无名管道
        参数:
            pipefd[0]:读管道文件描述符
            pipefd[1]:写管道文件描述符
        返回值:
            成功返回0 
            失败返回-1 

eg:

int main(void)
{pid_t pid;int fd[2];int ret = 0;char tmpbuff[4096] = {0};ret = pipe(fd);                              //创建无名管道,失败返回-1if(ret == -1){perror("fail to pipe");return -1;}pid = fork();if(pid == -1){perror("fali to fork");return -1;}if(pid == 0){strcpy(tmpbuff,"hello world !");write(fd[1],tmpbuff,strlen(tmpbuff));          //写入stelen长度的字符串,写用strlen,读用siezof}else if(pid > 0){read(fd[0],tmpbuff,sizeof(tmpbuff));           //read 具有阻塞功能(有写端的前提),在没有读到的时候会等待,但是系统不会等待,会去执行子程序,所以永远都是先子程序再父程序printf("tmpbuff = :%s\n",tmpbuff);             //sizeof是最多读4096大小的,但是有多少内容打印多少东西}close(fd[0]);close(fd[1]);return 0;
}

        无名管道特性(16*4k):
            1.管道中至少有一个写端: 
                读取数据时,如果管道中有数据直接读取,管道中没有数据阻塞等待直到有数据写入读出,继续向后执行
            2.管道中没有写端:
                读取数据时,如果管道中有数据直接读取,管道中没有数据不阻塞等待直接向下执行
            3.管道中至少有一个读端:
                写入数据时,如果管道中没有存满,则直接写入,管道中如果存满,则阻塞等待直到有数据读出,才能继续写入
            4.管道中没有读端:
                写入数据时,会产生管道破裂错误,导致程序崩溃

 2.有名管道

   打开管道文件 -> 读写管道文件 -> 关闭管道文件(文件IO)     
   注意:有名管道必须读写两端同时加入才能继续向下执行

           1.mkfifo 

 int mkfifo(const char *pathname, mode_t mode);
          功能:
            创建一个管道文件
          参数:
            pathname:管道文件路径
            mode:权限
          返回值:
            成功返回0 
            失败返回-1 

memset(清零的数组首地址,0,sizeof(1参))  ---  数组置位为 0

eg:实现用两个管道对两个进程进行聊天的功能

文件A.c:                                                                         文件B.c:


 

2.信号

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

    1.信号的种类

    2.信号处理方式:
        1.缺省:
            按照系统默认的方式处理
        2.忽略:
            不响应信号
        3.捕捉:
            按照自定义方式处理信号

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

        以下三个信号可以从键盘输入:
        SIGINT:ctrl + c 
        SIGQUIT:ctrl + \
        SIGTSTP:ctrl + z

    4.signal 
        typedef void (*sighandler_t)(int);
        sighandler_t signal(int signum, sighandler_t handler);
        功能:
            改变信号的处理方式
        参数:
            signum:信号的编号
            handler:信号的处理方式
                SIG_IGN     忽略处理
                SIG_DFL     缺省处理
                函数首地址   捕捉处理
        返回值:
            成功返回之前处理函数的首地址
            失败返回SIG_ERR 

eg:

void handler1(int signo)
{printf("SIGINT 信号来了!\n");
}void handler2(int signo)
{printf("SIGQUIT 信号来了!\n");
}void handler3(int signo)
{printf("SIGTSTP号来了!\n");
}int main(void)
{signal(SIGINT,handler1);signal(SIGQUIT,handler2);signal(SIGTSTP,handler3);while(1){}return 0;
}

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

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

相关文章

Rust 交叉编译 macOS 为 Linux 和 Windows

文章目录 前言环境案例macOS 编译为 Linux 和 Windows 可用二进制程序编译为 Linux 平台编译为Windows平台 最后 前言 鉴于 rust 中文资料较少,遇到问题的解决方案更少。这里记录遇到的一些问题。 Rust 支持交叉编译,可以在 macOS 平台编译出 Linux 或者…

机器学习——CBOW基于矩阵(手动实操)

基于矩阵的CBOW基础算法,其实是负采样的前提算法。 主要是根据 预测准确率为22%左右 说实话。。。我已经很满意了,至少这个东西是可以去预测的,至于预测为什么不正确,我目前猜测主要还是跟词频有关。 在结果中,an…

uniapp:启动图 .9png 制作教程

1、工具安装:自行下载Android Studio 2、制作.9png 注意上图3条黑线的位置,意思是:标注黑线的位置可以进行缩放。 对其大多数启动图来说,标注以上3条黑线即可。

一周掌握【机器学习】入门知识

学习目标: 一周掌握 机器学习 入门知识 学习内容: 1.了解机器学习的基本概念: 阅读由 Keras 的创建者 Francois Chollet 编著的《使用 Python进行深度学习》。这本书从程序员的角度介绍了机器学习的基础知识。您可以阅读第 1-4 章&#xff…

ETH开源PPO算法学习

前言 项目地址:https://github.com/leggedrobotics/rsl_rl 项目简介:快速简单的强化学习算法实现,设计为完全在 GPU 上运行。这段代码是 NVIDIA Isaac GYM 提供的 rl-pytorch 的进化版。 下载源码,查看目录,整个项目…

创新之巅 健康之选 森歌集成灶智能水洗新揭秘

2024年2月27日,一场引领智能厨电风潮的盛会在杭州隆重召开。森歌集成灶以“勠力同心 共生共歌”为主题,成功举办了2024森歌智能厨电优秀经销商峰会。此次峰会上,森歌集成灶发布了令人瞩目的奥运冠军同款智能厨电新品——森歌鲸洗小灶Z60&…

前端架构: 脚手架之多package项目管理和架构

多package项目管理 1 )多package项目管理概述 通常来说,当一个项目变大了以后,我们就要对这个项目进行拆分在前端当中,对于项目进行拆分的方式,通常把它称之为javascript包管理需要使用一个工具叫做 npm (Node Packag…

JS二进制文件转换:File、Blob、Base64、ArrayBuffer

类型转换 1. Blob、File → Base64 function fileToDataURL(file) {let reader new FileReader();reader.readAsDataURL(file);reader.onload function (e) {return reader.result;}; }2. Base64 → Blob、File // Base64 转为 Blob function dataURLToBlob(fileDataURL) …

【服务器磁盘清理技巧】

服务器磁盘空间的管理是一个非常重要的系统管理员工作。大量的日志文件、临时文件、备份文件等可能会迅速填满你的磁盘空间,导致应用无法正常运行。因此,磁盘空间的清理和管理就显得非常重要。 本文将介绍一些在Linux服务器上清理磁盘空间的基本技巧。 …

Java开发的核心模式 - MVC

文章目录 1、MVC设计模式2、Web开发本质3、服务器的性能瓶颈 1、MVC设计模式 MVC设计模式示意图 在整个Java学习之旅中,MVC(Model-View-Controller)设计模式无疑占据着极其重要的地位,堪称理解和掌握Java项目开发精髓的钥匙。如…

Python Pandas处理金额注意事项和案例

使用 Python 的 Pandas 库处理金额时,有几个注意事项可以帮助确保准确性和避免常见的问题: 注意事项 使用适当的数据类型: 金额通常应该使用定点数来表示,以避免浮点数运算中的舍入误差。可以使用 decimal.Decimal 类型来保持高精度。 避免…

IP源防攻击IPSG(IP Source Guard)

IP源防攻击IPSG(IP Source Guard)是一种基于二层接口的源IP地址过滤技术,它能够防止恶意主机伪造合法主机的IP地址来仿冒合法主机,还能确保非授权主机不能通过自己指定IP地址的方式来访问网络或攻击网络。 2.1 IPSG基本原理 绑定…

关于delphi6提示[Fatal Error] File not found: ‘System.pas‘

关于delphi6提示[Fatal Error] File not found: System.pas 一、[Fatal Error] File not found: System.pas的原因 1、System.dcu的输出没有覆盖项目引用路径..\..\dcu下 2、注意事项:System.pas等源码不能赋值到..\..\dcu 3、下述控件的Tools-Environment Optio…

android嵌入式开发及实训答案,android面试简历模板

前言 本想今年辞掉工作大干一场,没想到碰到疫情,家里蹲了3个月…,还好字节能给一次机会。前阵子字节跳动的提前批开始了,看宣传是说有海量HC,机会多多,本着涨涨面经的心理,然后就投递了一下杭州…

如何利用ChatGPT搞科研?论文检索、写作、基金润色、数据分析、科研绘图(全球地图、植被图、箱型图、雷达图、玫瑰图、气泡图、森林图等)

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

车规级存储芯片SPI NOR Flash

国产SPI NOR Flash厂家聚辰提供多种容量选择,可满足多种实时操作系统所需的不同存储空间;并且,拥有四种不同电压范围,分别为3V、1.8V、1.2V以及针对电池供电应用推出的1.65V~3.6V宽压供电的产品系列;同时,提…

【flask+python】利用魔术方法,更优雅的封装model类

定义model # Time :2024-2024/2/27-14:49 # Email :514422868qq.com # Author :Justin # file :user.py # Software :01-fishbook from app.model.base import Base from sqlalchemy import Column, Integer, SmallInteger, String from werkzeug.security …

深入浅出JVM(十七)之并发垃圾收集器CMS

上篇文章介绍用户线程与GC线程并发执行时可能产生的问题以及使用三色标记法演示原始快照和增量更新两种解决方案 这篇文章将主要介绍并发垃圾收集器中的CMS,其中CMS使用增量更新来解决对象消失问题,如果不了解增量更新的同学可以查看上篇文章深入浅出JV…

【k8s 高级调度--污点和容忍】

1、调度概念 在 Kubernetes 中,调度(scheduling)指的是确保 Pod 匹配到合适的节点, 以便 kubelet 能够运行它们。 抢占(Preemption)指的是终止低优先级的 Pod 以便高优先级的 Pod 可以调度运行的过程。 驱逐…

为什么会对猫毛过敏?如何缓解?浮毛克星—宠物空气净化器推荐

猫咪过敏通常是因为它们身上的Fel d1蛋白质导致的,这些蛋白质附着在猫咪的皮屑上。猫咪舔毛的过程会带出这些蛋白质,一旦接触就可能引发过敏症状,比如打喷嚏等。因此,减少空气中的浮毛数量有助于减轻过敏现象。猫用空气净化器可以…