Bloquer un pipe et afficher ca capacité.
Bonjour, je veux faire un programme en c..qui fait une ecriture seulement sur un tube et ferme la lecture jusu'à la saturation de ce dernier et la lecture ce bloque. en attendant que le tube ce vide. si un signal survient dans cet état, on affiche le nombre d'octets placés dans le tube(ca capacité). merci d'avance.. j'ai commencé avec ca:
Code:
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);
} |
mais le probleme c'est que l'ecriture ne ce bloque pas même si j'ai atteint la capacité du tube(PIPE_BUF).
le resultat
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
la capacité du tube est :4096
.......
eciture dans un tube sans lecteurs
4857
il ya 4877 octets dans le tube
eciture dans un tube sans lecteurs
4877
il ya 4878 octets dans le tube
eciture dans un tube sans lecteurs
4878
/*pas d'arret même si je depasse :4096*/ |