# Include <signal. h> # include <unistd. h> # include <limits. h> # include <stdio. h> # include <stdlib. h> int count; void alrm_action (INT); int main () {int P [2]; int pipe_size = 0; char c = 'X'; static struct sigaction Act; /* set up the signal handler */act. sa_handler = alrm_action; sigfillset (& (Act. sa_mask);/* Create the pipe */If (pipe (p) =-1) {perror ("pipe call"); exit (1 );} /* determine the size of the pipe */pipe_size = fpathconf (P [0], _ pc_pipe_buf); printf ("maximum size of write to pipe: % d bytes \ n ", pipe_size);/* set the signal handler */sigaction (sigalrm, & act, null); While (1) {/* set alarm */alarm (5 ); /* write down pipe */write (P [1], & C, 1);/* reset alarm */alarm (0 ); if (++ count % (1024*8) = 0) {printf ("% d characters in pipe \ n", count );}}} /* called when sigalrm received */void alrm_action (INT signo) {printf ("Write blocked after % d characters \ n", count); exit (0 );}