210124阶段三信号屏蔽,管道通信

本文详细介绍了Linux中的信号屏蔽机制,包括如何使用sigset_t、sigprocmask等函数进行信号屏蔽与取消屏蔽。同时,探讨了管道通信的原理,特别是匿名管道和命名管道的差异,强调其在父子进程或兄弟进程间通信的应用。通过学习,掌握了信号处理和进程间通信的关键知识点。
摘要由CSDN通过智能技术生成

一、学习的知识点

  1. 64个信号源 前32个信号 每个信号都有对应的函数指针(回调函数),
  2. 从信号到函数指针中间还有64个开关(mask)(屏蔽信号),开关默认允许,只有允许信号才能触发函数指针
  3. 屏蔽信号之前还有pending(未决寄存器)。发送一个信号,对应的pending为1.pending用户只能查看,屏蔽信号才能被用户操作。函数指针被执行后,pending自动清零。被阻塞则为1。
  4. 信号源-》pending-》屏蔽开关-》函数指针

1屏蔽信号

  1. sigset_t best;定义一个信号集合
  2. sigemptyset(&best); 清空信号集,相当于字符指针的清零
  3. sigaddset(&best,SIGINT); 把要屏蔽的信号放入集合
  4. sigprocmask(SIG_BLOCK, &best, NULL); 屏蔽2号信号 SIG_BLOCK 设置为阻塞 best 要屏蔽的信号集
  5. sigprocmask(SIG_UNBLOCK, &pset, NULL); 取消屏蔽信号
  6. sigfillset(&pset); //所有信号加进去 32 33 没有
  7. sigdelset(&pset,SIGINT) 删除某个信号
  8. sigismember(&pset,SIGINT); 查看信号是否在信号集中

2管道

  1. 缓存(是一段内存),在内核,缓存数据,用于进程间通信
  2. 管道是unix中最古老的进程间通信的形式
  3. 把一个进程连接到另一个进程的一个数据流称为 管道
  4. 是半双工通信。
  5. 匿名管道只能用于父子进程或兄弟进程间。
  6. 在这里插入图片描述

2.1匿名管道

	int pipefd[2];//文件描述符数组 成功返回0

    if (pipe(pipefd) == -1) //创建一个无名管道
    {
   
        perror
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值