#include #include #include #include /* * close_pipe -- test if closing the reading end genereates sigpipe */ int main(void) { int p[2]; int pid; if ( pipe(p) == -1 ){ exit(1); } pid = fork(); if ( pid == -1 ) exit(2); if ( pid == 0 ) be_reader(p); else be_writer(p); return 0; } int be_reader(int p[]) { close(p[1]); printf("reader here, sleeping for 3..\n"); sleep(3); printf("about to close pipe\n"); close(p[0]); } void handler(int s) { printf("Got sigpipe!\n"); exit(2); } int be_writer(int p[]) { signal(SIGPIPE, handler); close(p[0]); pause(); }