C - Linux: Processus fils, écrire dans tube, avant de réveiller père par le signal alarm()
Bien le bonjour/bonsoir à tous !
Après différents problèmes avec la fonction ptrace, avec les tubes nommés, avec des pointeurs et autres trucs encore j'en ai presque fini!
Voilà mon dernier (pour l'instant!) problème:
Dans un tube nommé créé comme ceci
Code:
mknod("leTube", S_IFIFO | 0666, 0);
J'écris la valeur d'un compteur de boucle...
Code:
1 2 3 4 5 6
| double i, j;
for (i=0; i<100; i++) {
write (tubeProd, &i, sizeof(double));
for (j=0; j<30000000; j++) {
}
} |
J'ai un signal alarm(2) qui se déclenche donc toutes les 2 secondes et qui redonne la main au processus père (car tout ça se déroule dans un processus fils).
Dans le processus père, je cherche à afficher le compteur de boucle "i" du processus fils
Code:
1 2 3
| double z;
read(tubeCons, &z, sizeof(double));
printf("Processus pere: i = %g\n", z); |
Le problème est que comme je suis dans une FIFO, le fils écrit 0, 1, 2, 3, 4, 5, .... et le compteur "i" tourne beaucoup plus vite qu'un tour en 2 secondes.
Je cherche donc à écrire dans ma file qu'au moment où mon signal se déclance. Dans l'absolu je souhaiterai:
Processus fils:
boucle qui tourne.... (i==7 par exemple) écriture dans mon tube de "i" alarm() donc je réveille le père
Processus père:
je lis mon tube dans z. J'affiche z: ==7. je relance le processus fils avec ptrace(PTACE_CONT....)
Processus fils:
boucle qui tourne.... (i==15 par exemple) écriture dans mon tube de "i" alarm() donc je réveille le père
.
.
EDIT:
Solution: Afficher le dernier moment dans le père puis dans le fils écrire le "i" actuel dans la déroute par alarm(). On travail à contre temps.
Problème résolu, merci quand même....
Cordialement,
Graimbault.