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
J'écris la valeur d'un compteur de boucle...
Code : Sélectionner tout - Visualiser dans une fenêtre à part mknod("leTube", S_IFIFO | 0666, 0);
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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++) { } }
Dans le processus père, je cherche à afficher le compteur de boucle "i" du processus fils
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double z; read(tubeCons, &z, sizeof(double)); printf("Processus pere: i = %g\n", z);
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.
Partager