1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>
#include <limits.h>
int compteur;
void rien (int sig)
{
if (sig == SIGPIPE)
printf ("eciture dans un tube sans lecteurs \n");
printf ("%d\n",compteur);
}
void sature(int sig){
??????
}
int main() {
int n,i=0, t[2];
char buffer [512];
struct sigaction act;
printf("la capacité du tube est :%d \n",PIPE_BUF);
act.sa_handler =rien;/* fonction1 à lancer */;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGPIPE, &act, NULL);
act.sa_handler =sature;/* traité le signal du blocage*/
sigaction(SIGPIPE, &act, NULL);
if (pipe(t) == -1){
perror("pipe");
exit(1);
}
close (t[0]);/*sans lecteur*/
compteur=0;
//lecture sur l'entrée standard
while((n=read(0,buffer,sizeof(buffer)))>0)
{
compteur+=n;
printf("il ya %d octets dans le tube \n",compteur);
//ecriture dans le tube
write(t[1],buffer,n);
}
exit(EXIT_SUCCESS);
} |
Partager