Programme qui ne se ferme pas a la fin
encoremoi
-
encoremoi -
encoremoi -
Bonjour,
j'ai écrit un programma, il fait ce qu'il faut, mais a la fin, il ne se ferme pas... comment faire pour le terminer ,
j'ai un programme qui demande en boucle une saisie de nombre, et les envoie au fur et a mesure a un 2nd programme qui les affiche... jusqu'a ce que j'écrive 0.
quand j'envoie 0, les 2 programmes ferment le pipe qui leur sert a communiquer, et chacun faitexit(-1) qui devrait cloturer chaque programme... mais ca ne cloture rien du tout.
Voici mon code:
prog1:
prog2 :
Si vous pouviez me dire ce qui bloque...
merci !
j'ai écrit un programma, il fait ce qu'il faut, mais a la fin, il ne se ferme pas... comment faire pour le terminer ,
j'ai un programme qui demande en boucle une saisie de nombre, et les envoie au fur et a mesure a un 2nd programme qui les affiche... jusqu'a ce que j'écrive 0.
quand j'envoie 0, les 2 programmes ferment le pipe qui leur sert a communiquer, et chacun faitexit(-1) qui devrait cloturer chaque programme... mais ca ne cloture rien du tout.
Voici mon code:
prog1:
int main(void)
{
int dp,pid;
int nb=3;
unlink("pipe");
mkfifo("pipe",0666);
pid=fork();
if (pid==0)
execv("exopipe2",NULL);
dp=open("pipe",O_WRONLY);
if (dp==0) erreur("pb d'ouverture de pipe\n");
while(nb!=0)
{
//sleep(100);
printf("taper le nombre\n");
scanf("%d",&nb);
write(dp,&nb,sizeof(int));
kill(pid,SIGUSR1);
}
sleep(100);
close(dp);
exit(-1);
}
void erreur(char *mes)
{
perror(mes);
exit(-1);
}
prog2 :
void erreur(char *mes);
void ferme(void);
void lecture(int sig);
int dp;
int main(void)
{
dp=open("pipe",O_RDONLY);
if (dp==0) erreur("pb d'ouverture de pipe\n");
signal(SIGUSR1,lecture);
for(;;)
pause();
}
void lecture(int sig)
{
int result,re;
re=read(dp,&result,sizeof(result));
if (re==0) erreur("pb de lecture\n");
if(result!=0)
printf("le resultat est %d\n",result);
else
ferme();
}
void ferme(void)
{
close(dp);
exit(-1);
}
void erreur(char *mes)
{
perror(mes);
exit(-1);
}
Si vous pouviez me dire ce qui bloque...
merci !
A voir également:
- Programme qui ne se ferme pas a la fin
- Fin des zfe - Guide
- Comment fermer un programme qui ne répond pas - Guide
- Application qui se ferme toute seule - Guide
- Programme demarrage windows - Guide
- Rouvrir onglet fermé chrome - Guide
2 réponses
Eh oui, c'est encore moi!
Bon, il faudrait bien potasser le sujet avant de se lancer dans la passionnante aventure des 'fork' !
Le programme ne peut se terminer tant que le code de retour du fils n'a pas été lu; d'autre part avec 'execv', je me demande s'il ne faut pas demander au processus de terminer; j'essairai donc de rajouter:
Bon vent.
Bon, il faudrait bien potasser le sujet avant de se lancer dans la passionnante aventure des 'fork' !
Le programme ne peut se terminer tant que le code de retour du fils n'a pas été lu; d'autre part avec 'execv', je me demande s'il ne faut pas demander au processus de terminer; j'essairai donc de rajouter:
kill (pid, SIGTERM); wait(NULL); close(dp); return(0);Mettre plutôt un return(0) qu'un exit(-1) qui signifie une erreur; d'autre part on réserve la sortie du programme par exit'' dans les fonctions (un return ne fait pas sortir du programme).
Bon vent.
Merci loupius !
Effectivement, avec sigterm, ca marche.
J'ai essayé une autre méthode aussi , dans le prog2 : je met une condition dans ma boucle
avec fin un booléen qui j'incremente quand je recois le chiffre 0.
Ca donne le meme resultat que sigterm
Effectivement, avec sigterm, ca marche.
J'ai essayé une autre méthode aussi , dans le prog2 : je met une condition dans ma boucle
for(;;)
{
if (fin==0)
pause();
else
close(dp);
return(0);
}
avec fin un booléen qui j'incremente quand je recois le chiffre 0.
Ca donne le meme resultat que sigterm