[un peu HS] argc, argv et exec*()
Bonjour à tous,
Pardonnez-moi le hors sujet léger. Je tombe sur un problème que je ne
comprends pas tout à fait.
J'essaie de lire un fichier XML trivial (mais long) à coup de awk avant
de passer le résultat dans une moulinette (en C, mais là n'est pas la
question) pour trier les différentes données.
En ligne de commande, je commence à traiter mon fichier XML comme ceci :
awk 'BEGIN { I=0; } /<comp ref=.*>/ { I=I+1; } { if (I>0) print; }
/<\/comp>/ { I=I-1; }' alimentations_haute_tension.xml
et ça fonctionne parfaitement. J'extrais tous les blocs <comp
ref=xxx>...</comp>, même les blocs récursifs. Je n'ai pas besoin de plus
pour l'instant.
Comme le traitement doit être automatique, j'ai donc collé cela dans un
programme en C avec un execvp(). Extrait :
...
{
for(i = 0; i <= nombre_arguments; i++)
printf("%d: %s\n", i, arguments[i]);
execvp(arguments[0], arguments);
}
...
Je vous fais grâce de ce qui est avant et après ce traitement, en
particulier la grouille avec fork() et j'en passe.
Sur la console, j'obtiens bien :
0: awk
1: 'BEGIN { I=0; } /<comp ref=.*>/ { I=I+1; } { if (I>0) print; }
/<\/comp>/ { I=I-1; }'
2: alimentations_haute_tension.xml
3: (null)
Donc argc[0] vaut awk, argc[1] vaut bien le contenu du script awk et
argc[2] le nom du xml à analyser.
Résultat :
"awk: ligne de commande:1: 'BEGIN { I=0; } /<comp ref=.*>/ { I=I+1; } {
if (I>0) print; } /<\/comp>/ { I=I-1; }'"
Et là, je ne comprends plus, d'autant que si je copie simplement les
trois valeurs dans un shell, ça fonctionne. Je suis preneur de toute
lumière.
Bien cordialement,
JKB
Reply to: