[C] signal et exec* , association???

signal et exec* , association??? [C] - C - Programmation

Marsh Posté le 03-06-2008 à 22:45:09    

salut à tous.
 
J'aurais besoin pour d'un petit coup de main pour un code que je developpe en ce moment.
 
Alors voila, c'est peut-etre simple mais je trouve pas comment associer une fonction crée  
(pour commencer ce serait simplement remove) à la fermeture (ou autre) d'une application  
lancée avec un exec (ici execlp). La premiere idée qui m'est venue est d'utiliser signal.  
Seulement jvois pas trop comment connaitre le signal de "fermeture" ou autre de tel ou tel
logiciel (sachant que je compte en lancer des differents).
 
Mon but explicite ici est de supprimer un fichier temporaire apres l'avoir lu. Par exemple un film
execlp(vlc, vlc, "./monfilm.avi",NULL), et lorsque vlc est fermé, remove("./monfilm.avi" );
 
Si quelqu'un a une idée et qu'il souhaite la partager, il est le bien venu
(ceux qui pensent à m'envoyer un lien google, abstenez-vous de repondre svp :o ).
 
:jap:  

Reply

Marsh Posté le 03-06-2008 à 22:45:09   

Reply

Marsh Posté le 04-06-2008 à 09:20:29    

SIGCHLD est envoyé au parent quand un fils termine. Si tu utilises la forme "étendue" de sigaction, ton signal handler reçoit en argument un siginfo_t, qui contient entre autre le pid du process qui a envoyé le signal.

Reply

Marsh Posté le 04-06-2008 à 17:07:27    

salut.
 
merci d'avoir repondu, mais j'ai trouvé plus simple... jsuis etonné de pas y avoir pensé plus tot.
jm'etais enfermé à vouloir utiliser signal.
 
Plus simple donc (et c'est toi qui m'a mis sur la piste). je fork le execvp, et je met un waitpid sur
le pere avec le remove qui suit..
 
Pour ceux qui tomberont sur ce type de pb (au moins que le post serve à qqn): voila l'algo en pseudo code:
 
//code C
 
switch(fork()){
   case 0:  
      execvp(***,"monfichier",*);
      break;
 
   case 1:  
      waitpid(0,*****);
      remove(monfichier);
      break;
  }    
 
//code C
 
voila
:jap:  
 

Reply

Marsh Posté le 05-06-2008 à 09:05:38    

il te faut contrôler le retour de waitpid et éventuellement boucler.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed