如何屏蔽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, '
#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;
}
'
, 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程序退出了。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java主要用来开发什么_浅谈Java开发主要是用来做什么的?

    java主要用来开发什么_浅谈Java开发主要是用来做什么的?java是一种编程语言,所以当然是用来“创造”的啦。它能做的事情非常多,涵盖了编程领域的方方面面。1、桌面级应用,简单来说就是主要功能都在计算机上运行的程序,比如word、excel等办公软件就归为此类。2、企业级应用(应用最广泛),简单来说就是,使用人数较多,数据量较大的应用。它对系统的稳定性、安全性、扩展性等要求较高。包括HR管理软件、营销管理软件、等几乎所有你能想到的应用。3、嵌入式设备及…

  • Laravel / PHP 扩展包视频教程

    Laravel / PHP 扩展包视频教程

    2021年10月26日
  • linux系添加路由,Linux添加路由的两种方法「建议收藏」

    linux系添加路由,Linux添加路由的两种方法「建议收藏」Linux中增加软路由的两种方法第一种:routeadd-net172.16.6.0netmask255.255.255.0gw172.16.2.254deveth0/*增加一条网络172.16.6.0/24经过172.16.2.254eth0*//*-net增加网络-host增加主机netmask子网掩码gw网关dev装置,设备,这里是你的网卡名*/ro…

  • 深度学习图像标注工具汇总

    深度学习图像标注工具汇总对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上限。世界上最遥远的距离就是我们用同一个模型,但是却有不同的任务。

  • 相机的光圈大小有什么区别「建议收藏」

    相机的光圈大小有什么区别「建议收藏」很多人单反相机已经用了很久了,但是对于光圈的设置还是不是很清楚,大光圈和小光圈到底有什么区别?拍摄一些场景到底要用什么参数?一起来看看吧。方法/步骤什么叫大光圈:在单反相机当中有一个指标叫做光圈,光圈

  • 数据统计的视觉盛宴—visifire charts

    数据统计的视觉盛宴—visifire charts上文中我给大家展示了微软提供的开源toolkit中图表控件的效果和使用,但是与fusioncharts相比效果还是显得逊色。本篇将介绍另一种charts控件库—visifirecharts。visifire控件库不仅涵盖wpf/silverlight,还有windowsphone的版本(由此可见将wpf的代码移植到silverlight和windowsphone上是一个非…

发表回复

您的电子邮箱地址不会被公开。

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