如何屏蔽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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

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

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