Je poste ce topic au cas où quelqu'un aurait la même erreur que celle que j'ai déplombée au bout d'une heure, le temps de comprendre ce qui se passait.
Mon programme parse un fichier de conf et effectue un traitement pour chaque ligne : création d'un fichier temporaire puis lancement d'un outil qui utilise ce fichier temporaire.
Les traitements faits ressemblent donc à :
cat $CONF_FILE | nawk -v prmFile="/tmp/$progname.$$.prm" '
BEGIN {
...
}
{
printf("Param1=%s\n", $1) > prmFile
printf("Param2=%s\n", $2) >> prmFile
system(sprintf("myprog %s", prmFile))
system(sprintf("rm %s", prmFile))
}
|
En fait dans ce cas le nawk boucle sur les lignes du fichier de conf mais passé la première itération il est incapable de reconstruire prmFile.
D'ailleurs même sans le rm la redirection simple ne fonctionne pas. Pourquoi ?
C'est là où j'ai perdu une bonne heure le temps de mettre des traces d'exécution au bon endroit et de comprendre le résultat : en fait au moment où le premier '>' est fait un flux est créé et est associé à prmFile.
Si un rm est fait le fichier est effacé mais le flux est toujours ouvert !!!! Et il ne peut pas écrire puisque le fichier associé est détruit !
S'il n'y avait pas le rm, le problème reste entier puisque le flux a gardé comme info que les informations à écrire sont à placer à la fin du fichier (les >> ).
Il faut donc ajouter la ligne suivante avant le rm :
Et tout rentre dans l'ordre.
Message édité par Toxin le 12-07-2002 à 09:21:04
---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos