如何屏蔽SIGPIPE信号

如何屏蔽SIGPIPE信号#include<stdlib.h>#include<sys/signal.h>//默认读写一个关闭的socket会触发sigpipe信号该信号的默认操作是关闭进程这明显是我们不想要的//所以我们需要重新设置sigpipe的信号回调操作函数比如忽略操作等使得我们可以防止调用它的默认操作//信号的处理是异步操作也就是说在这一条语句以后继续往下执行中如果碰到信号依旧会调用信号的回调处理函数//处理sigpipe信号voidhandle_for_s

大家好,又见面了,我是你们的朋友全栈君。

#include <stdlib.h>
#include <sys/signal.h>

//默认读写一个关闭的socket会触发sigpipe信号 该信号的默认操作是关闭进程 有时候这明显是我们不想要的
//所以此时我们需要重新设置sigpipe的信号回调操作函数 比如忽略操作等 使得我们可以防止调用它的默认操作 
//信号的处理是异步操作 也就是说 在这一条语句以后继续往下执行中如果碰到信号依旧会调用信号的回调处理函数
//处理sigpipe信号
void handle_for_sigpipe()
{ 
   
    struct sigaction sa; //信号处理结构体
    memset(&sa, '\0', sizeof(sa));
    sa.sa_handler = SIG_IGN;//设置信号的处理回调函数 这个SIG_IGN宏代表的操作就是忽略该信号 
    sa.sa_flags = 0;
    if(sigaction(SIGPIPE, &sa, NULL))//将信号和信号的处理结构体绑定
        return;
}

int main(int argc, char *argv[])
{ 
   
    handle_for_sigipipe();
    while(1){ 
   }
    return 0;
}

(1)编译执行上述代码gcc -o handle_for_sigpipe handle_for_sigpipe.c。
启动另一个Linux终端并执行killall -SIGPIPE sigpipe,可以发现sigpipe程序的默认操作关闭进程并未执行。
(2)将main函数中的handle_for_sigpipe();,注释后重新编译执行。
再次启动另一个Linux终端并执行killall -SIGPIPE sigpipe,可以发现sigpipe程序退出了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139188.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx 转发_nginx转发文件流

    nginx 转发_nginx转发文件流前后分离模式减少域名寻址时间,直接走静态html文件的域名请求,服务器做转发location/api/{proxy_passhttp://api.domain.com;#http://api.domain.com/api/}location/api/{proxy_passhttp://api.domain.com/;http://api.domain.com/}hosts127.0.0.1api.domain.com

    2022年10月19日
  • js 数组转json,json转数组[js 数组与json 互相转换]

    js 数组转json,json转数组[js 数组与json 互相转换]js数组和json经常需要相互转换,在此记录它们之间的转换代码://json字符串转数组vararray=[99,100,{“name”:”Jerry”},{“site”:”hdjc8.com”}];JSON.stringify(array);alert(array);//json字符串转数组varj…

    2022年6月21日
  • 最全的android图片加密

    最全的android图片加密在android开发过程中有些时候一些重要的图片,我们不希望用户通过文件管理直接能查看,我们该怎么办呢,当然你可以把图片放在android的内部存储中,data/data/下,但毕竟androidroot用户一大堆,还是解决不了问题。那么我们就需要对图片进行加密,当然加密的方法有很多种,下面给大家推荐我常用的2中方法,基本上可以解决大部分问题。   1、国际标准的AES加密,通过加密流存储

    2022年6月21日
  • goland 2021.10激活码【2021.10最新】

    (goland 2021.10激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsa…

    2022年3月27日
  • dpkg命令

    dpkg命令dpkg命令如果ubuntu要安装新软件,已有deb安装包(例如:iptux.deb),但是无法登录到桌面环境。那该怎么安装?答案是:使用dpkg命令。dpkg命令常用格式如下:sudodpkg-Iiptux.deb#查看iptux.deb软件包的详细信息,包括软件名称、版本以及大小等(其中-I等价于–info)sudodpkg-ciptux.deb#查看iptux.

    2022年5月22日
  • SPSS操作(四):系统聚类分析

    SPSS操作(四):系统聚类分析现用如下数据做系统聚类分析:将数据导入spss中,如图:步骤如下:①【分析】—-【分类】—-【系统聚类】②x2、x3、x4、x5、x6、x7、x8添加到变量,x1(即地区)添加到个案标注依据小技巧:添加变量的时候,可以单击【医疗机构床位数(张)】,然后按住shift键不松,鼠标单击【医院(个)】就可以选择多个变量一起添加③点击【统计】勾选【解的范围】,可以根据自己的需要选择最小聚类数和最大聚类数(这里我设置为2和5),然后点击【继续】④点击【图】,(这里我选择的是做系谱图

    2022年10月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号