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 : Sélectionner tout - Visualiser dans une fenêtre à part
mknod("leTube", S_IFIFO | 0666, 0);
J'écris la valeur d'un compteur de boucle...
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++) {
	}
}
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 : 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);
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.