2.28 进程间的通信 管道 and信号

1.进程间的通信:


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

1.管道:


    1.无名管道


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

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

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

2.有名管道


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

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

        1.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

    4.signal 
        typedef void (*sighandler_t)(int);
        sighandler_t signal(int signum, sighandler_t handler);
        功能:
            改变信号的处理方式
        参数:
            signum:信号的编号
            handler:信号的处理方式
                SIG_IGN     忽略处理
                SIG_DFL     缺省处理
                函数首地址   捕捉处理
        返回值:
            成功返回之前处理函数的首地址
            失败返回SIG_ERR 
    
    
    编写一个进程循环执行while (1) 当按下 SIGINT(ctrl + c) 打印SIGINT信号来了 当按下 SIGQUIT(ctrl + \) 打印SIGQUIT信号来了 当按下 SIGTSTP(ctrl + z) 打印SIGTSTP信号来了
    

1 #include "head.h"                                                                                                                                                                                       2 3 void handler1(int signo)4 {5     printf("SIGINT信号来了!\n");6 //  printf("SIGQUIT信号来了!\n");7 //  printf("SIGTSTP信号来了!\n");8     return;9 }10 11 void handler2(int signo)12 {13 //  printf("SIGINT信号来了!\n");14     printf("SIGQUIT信号来了!\n");15 //  printf("SIGTSTP信号来了!\n");16     return;17 }18 19 void handler3(int signo)20 {21 //  printf("SIGINT信号来了!\n");22 //  printf("SIGQUIT信号来了!\n");23     printf("SIGTSTP信号来了!\n");24     return;25 }26 27 int main(void)28 {29     void (*pret)(int) = NULL;30 #if 031     pret = signal(SIGINT, SIG_IGN);32     if (SIG_ERR == pret)33     {34         perror("fail to signal");35         return -1;36     }37 #endif38     39     signal(SIGINT,handler1);40     signal(SIGQUIT,handler2);41     signal(SIGTSTP,handler3);42 43 44     while (1)45     {46         47     }48 49     return 0;50 }51                   


        
        
    
    

    

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

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

相关文章

解决vue3按注册名动态渲染组件在setup中无效的问题

在setup语法糖中&#xff0c;按注册名动态渲染组件无效&#xff1a; <template><component :is"cpnName" /> </template> <script setup>import QuesTypeContent from ./QuesTypeContent.vue;const cpnName QuesTypeContent; </script&…

nginx 反向代理 与缓存功能

一 理论说明 &#xff08;一&#xff09;反向代理简介 反向代理&#xff1a;reverse proxy&#xff0c;指的是代理外网用户的请求到内部的指定的服务器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式。 即 代理服务机 Nginx 除了可以在企…

算法——滑动窗口之最大连续1的个数、将x减到0的最小操作数、水果成篮

3.最大连续1的个数 题目:. - 力扣&#xff08;LeetCode&#xff09; 题目要求的是给定一个二进制数组 nums 和一个整数 k&#xff0c;如果可以翻转最多 k 个 0 &#xff0c;则返回 数组中连续 1 的最大个数 。 按照题目正面去做,还要替换0,很麻烦 反正我们最后要求的是最长…

YOLOv8改进 | 独家创新篇 | 结合SOTA思想利用双主干网络改进YOLOv8(全网独家创新,最重磅的更新)

一、本文介绍 本文给大家带来的改进机制是结合目前SOTAYOLOv9的思想利用双主干网络来改进YOLOv8(本专栏目前发布以来改进最大的内容,同时本文内容为我个人一手整理全网独家首发 | 就连V9官方不支持的模型宽度和深度修改我都均已提供,本文内容支持YOLOv8全系列模型从n到x均可…

刷题笔记 洛谷 P1162 填涂颜色

思路来自 大佬 hat.openai.com/c/9c30032e-5fb9-4677-8c15-9ea6530dc6db 题目链接 P1162 填涂颜色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 搜索 首先 在外面围上一圈0开始搜素 因为题目说将封闭区域内的0变成2 我们可以在外面进行搜索 把外面所有可以搜索…

Nginx----高性能的WEB服务端(四)

一、http 协议反向代理 1、反向代理&#xff1a;缓存功能 ​ proxy_cache zone_name | off; 默认off #指明调用的缓存&#xff0c;或关闭缓存机制;Context:http, server, location #zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string; #缓存中…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(5.详解List数据结构)

本文是深入理解 Redis 常用数据类型源码及底层实现系列的第5篇&#xff5e;前4篇可移步(&#xffe3;∇&#xffe3;)/ 【Redis】深入理解 Redis 常用数据类型源码及底层实现&#xff08;1.结构与源码概述&#xff09;-CSDN博客 【Redis】深入理解 Redis 常用数据类型源码及底…

BeautifulSoup+xpath+re+css简单复习+新的scrapy的学习

1.BeautifulSoupsoup BeautifulSoup(html,html.parser)all_icosoup.find(class_"DivTable") 2.xpath trs resp.xpath("//tbody[idcpdata]/tr") hong tr.xpath("./td[classchartball01 or classchartball20]/text()").extract() 这个意思是找…

基于RabbitMQ的RPC通信

基于RabbitMQ的RPC通信 版本信息操作步骤搭建RabbitMQ(默认用户名:guest 密码:guest )服务端实现(srv.py)客户端实现(client.py)性能测试(4919 qps) 当需要调用局域网中的服务时,可以用frp进行穿透,也可以在公网搭建RabbitMQ服务器做消息中转,本文演示了这个步骤。 版本信息 …

文件拖放到窗体事件

网上的实现1 实现结果 具体实现代码&#xff1a;注意需要使能允许拖拽 public partial class Form1 : Form {public Form1(){InitializeComponent();this.AllowDrop true; //允许拖拽}private void Form1_DragEnter(object sender, DragEventArgs e){this.Text DateTime.No…

一键安装|卸载 mysql 8.2.0 shell脚本

场景&#xff1a;为了在无网、外网 mysql 安装方便&#xff0c;这里分享一个自己编写得 shell脚本 这里以当前最新版 mysql 8.2.0&#xff1b;centos-7 二进制包下载&#xff1a; 下载地址 mysql_install.sh #!/bin/bash # 解压安装包 tar -xf mysql-8.2.0-linux-glibc2.17-x8…

GO语言学习笔记(与Java的比较学习)(三)

函数 按值传递&#xff08;call by value&#xff09; 按引用传递&#xff08;call by reference&#xff09; Go 默认使用按值传递来传递参数&#xff0c;也就是传递参数的副本。函数接收参数副本之后&#xff0c;在使用变量的过程中可能对副本的值进行更改&#xff0c;但不…

TC3xx SMU、PMIC和Tranceiver的功能安全闭环

目录 1.TLF35584安全状态输出响应对象 1.1 响应ERR 收集到的错误信号 1.2 响应监控功能引发的ROT 1.3 响应看门狗引发的错误 1.4 环境过温引发的错误状态 1.5 为什么设计SSx&#xff1f; 2. 安全状态输出给谁 3.小结 在之前文章里&#xff0c;我们简述了TC3xx SMU如何…

npm install常见错误的完整指南

目录 1. ERR! Error: EACCES2. ERR! ENOENT3. ERR! network timeout4. ERR! Maximum call stack size exceeded5. ERR! Failed at the xxxxxx install script6. ERR! code EINTEGRITY7. ERR! Please try running this command again as root/Administrator8. ERR! code ELIFECY…

尚硅谷(SpringCloudAlibaba微服务分布式)学习代码Eureka部分

1.项目结构 2.cloud2024 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.a…

ERPNext v14在ubuntu22上安装配置的完整过程

注意:在配置ERPNext之前,我是用virtualbox配置了好多次ubuntu22.04操作系统,一路都很通畅,唯独重启操作系统后,就会出现黑屏的现象。期间尝试了更改显存大小、内存大小、磁盘大小,甚至一度怀疑是自己电脑或者ubuntu22.04的镜像问题等等,一直未解决。真正的原因竟然是vir…

面试笔记系列六之redis+kafka+zookeeper基础知识点整理及常见面试题

Redis redis持久化机制&#xff1a;RDB和AOF Redis 持久化 Redis 提供了不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储. AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redi…

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

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

Dell R730 2U服务器实践1:开机管理

新入手一台Dell R730 2U服务器&#xff0c;用来做FreeBSD下的编译工作和Ubuntu下简单的AI学习和调试。 服务器配置&#xff1a; CPU&#xff1a;E5 2680V4 2 14核心 内存&#xff1a;DDR4 ECC 16G2 2133 MHz 网卡&#xff1a;双千双万 Intel(R) 2P X540/2P I350 rNDC 硬盘…

html2canvas + JsPDF.js 导出pdf分页时的问题

问题描述 前一段时间 实现了html2canvas jspdf.js 导出pdf的功能 项目当时没有测试做完就先搁置 最近项目要上线发现分页时问题 这篇文章记录一下之前的bug import html2canvas from html2canvas; import JsPDF from jspdf export function savePdf(el, title) {html2canva…