C 语言程序输出 'Hello world!' 并处理 SIGPIPE 信号
SIGPIPE 信号表示管道或套接字已经关闭,而程序仍然尝试向其写入数据。如果程序未处理此信号,将被终止。
为了避免收到 SIGPIPE 信号,需要在程序中设置 SIGPIPE 信号处理程序,或者在写入数据之前检查文件描述符是否合法。
以下是一个输出 'Hello world!' 并处理 SIGPIPE 信号的 C 语言程序:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void sigpipe_handler(int signum) {
printf('Received SIGPIPE signal\n');
exit(1);
}
int main() {
// 设置 SIGPIPE 信号处理程序
signal(SIGPIPE, sigpipe_handler);
// 输出 'Hello world!'
printf('Hello world!\n');
// 写入数据到标准输出,并检查是否出错
if (write(STDOUT_FILENO, 'Hello world!', 12) == -1) {
perror('write');
}
return 0;
}
在上面的程序中,我们首先设置了 SIGPIPE 信号处理程序,然后输出了 'Hello world!'。接着,我们使用 write() 函数向标准输出写入数据,并检查是否出错。如果 write() 函数返回 -1,说明写入数据出错,我们通过 perror() 函数打印出错信息。
如果我们在程序运行过程中向它的输出管道发送了一个 SIGPIPE 信号,程序将会调用 sigpipe_handler() 函数,打印一条消息并退出。这样,我们就可以避免程序因未处理 SIGPIPE 信号而被终止。
原文地址: https://www.cveoy.top/t/topic/lQ6H 著作权归作者所有。请勿转载和采集!