C语言程序:输出'Hello world!'并处理SIGPIPE信号
#include <stdio.h>
#include <signal.h>
void sigpipe_handler(int signum) {
printf('Caught SIGPIPE signal\n');
}
int main() {
signal(SIGPIPE, sigpipe_handler);
printf('Hello world!\n');
fflush(stdout); //确保输出被立即写入到 stdout
int fd[2];
if (pipe(fd) == -1) {
perror('pipe');
return 1;
}
close(fd[0]); //关闭读管道
if (write(fd[1], 'test', 4) == -1) { //尝试向关闭的管道写入数据
perror('write');
}
return 0;
}
程序中使用signal函数注册了一个SIGPIPE信号处理函数sigpipe_handler。当程序写入一个已经关闭的管道时,内核会向进程发送一个SIGPIPE信号,如果进程没有捕获该信号,直接终止进程。在本程序中,当进程捕获到SIGPIPE信号时,会在屏幕上输出一条消息'Caught SIGPIPE signal'。为了测试这个信号处理函数,程序还创建了一个管道,并关闭了读管道,再尝试向该管道写入数据,从而触发SIGPIPE信号的发送。程序执行完毕后,输出如下:
Hello world!
Caught SIGPIPE signal
原文地址: https://www.cveoy.top/t/topic/lQ6I 著作权归作者所有。请勿转载和采集!