以前一直在听说产生SIGPIPE信号,我但我平时遇得少,没怎么管它,今天一小心就遇到
先看代码吧
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#define FIFO_FN "/tmp/test"
void catch_pipe(int n) {
printf("signo:%d\n", n);
}
int main() {
signal(SIGPIPE, catch_pipe);
if ((mkfifo(FIFO_FN, S_IRWXU | S_IRGRP | S_IROTH) < 0)
&& (errno != EEXIST)) {
perror("mkfifo:");
}
int fo = fork();
if (fo > 0) {
int fd = open(FIFO_FN, O_WRONLY);
if (fd == -1) {
perror("open pipe");
}
int flg = fcntl(fd, F_GETFL);
if (flg < 0) {
perror("fcntl:");
}
flg |= O_NONBLOCK;
fcntl(fd, F_SETFL, flg);
int wr;
char buf[1024];
printf("writing...\n");
sleep(1);
if ((wr = write(fd, buf, 1