J'utilise un appel système execvp dans un programme que je suis en train de
corriger.
execvp(arguments[0], arguments);
Une routine me lit la liste des arguments et cela fonctionne sans problème
sauf que... lorsque j'ai une redirection ">", ">&" "2>&1", cela n'est pas
traité. Par curiosité, j'ai fait un petit script de la forme :
#!/bin/bash
echo $1
echo $2
echo $3
exit 0
pour tester le truc... Les redirections n'apparaissent pas dans la liste
d'arguments, ce qui est somme toute assez logique. D'où ma question :
comment envoyer une redirection au travers d'execvp ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent Wacrenier
JKB écrit:
J'utilise un appel système execvp dans un programme que je suis en train de corriger.
execvp(arguments[0], arguments);
Une routine me lit la liste des arguments et cela fonctionne sans problème sauf que... lorsque j'ai une redirection ">", ">&" "2>&1", cela n'est pas traité. Par curiosité, j'ai fait un petit script de la forme :
Hein ? ">", ">&" "2>&1" sont des construction du shell, pas des option de la fonction execvp().
#!/bin/bash
echo $1 echo $2 echo $3
exit 0
pour tester le truc... Les redirections n'apparaissent pas dans la liste d'arguments, ce qui est somme toute assez logique. D'où ma question : comment envoyer une redirection au travers d'execvp ?
avec dup2 et éventuelement close (ainsi que pipe s'il y a un fork)
JKB <knatschke@koenigsberg.fr> écrit:
J'utilise un appel système execvp dans un programme que je suis en train de
corriger.
execvp(arguments[0], arguments);
Une routine me lit la liste des arguments et cela fonctionne sans problème
sauf que... lorsque j'ai une redirection ">", ">&" "2>&1", cela n'est pas
traité. Par curiosité, j'ai fait un petit script de la forme :
Hein ? ">", ">&" "2>&1" sont des construction du shell, pas des option
de la fonction execvp().
#!/bin/bash
echo $1
echo $2
echo $3
exit 0
pour tester le truc... Les redirections n'apparaissent pas dans la liste
d'arguments, ce qui est somme toute assez logique. D'où ma question :
comment envoyer une redirection au travers d'execvp ?
avec dup2 et éventuelement close (ainsi que pipe s'il y a un fork)
J'utilise un appel système execvp dans un programme que je suis en train de corriger.
execvp(arguments[0], arguments);
Une routine me lit la liste des arguments et cela fonctionne sans problème sauf que... lorsque j'ai une redirection ">", ">&" "2>&1", cela n'est pas traité. Par curiosité, j'ai fait un petit script de la forme :
Hein ? ">", ">&" "2>&1" sont des construction du shell, pas des option de la fonction execvp().
#!/bin/bash
echo $1 echo $2 echo $3
exit 0
pour tester le truc... Les redirections n'apparaissent pas dans la liste d'arguments, ce qui est somme toute assez logique. D'où ma question : comment envoyer une redirection au travers d'execvp ?
avec dup2 et éventuelement close (ainsi que pipe s'il y a un fork)
Pascal Bourguignon
JKB writes:
Bonjour à tous,
J'utilise un appel système execvp dans un programme que je suis en train de corriger.
execvp(arguments[0], arguments);
Une routine me lit la liste des arguments et cela fonctionne sans problème sauf que... lorsque j'ai une redirection ">", ">&" "2>&1", cela n'est pas traité. Par curiosité, j'ai fait un petit script de la forme :
#!/bin/bash
echo $1 echo $2 echo $3
exit 0
pour tester le truc... Les redirections n'apparaissent pas dans la liste d'arguments, ce qui est somme toute assez logique. D'où ma question : comment envoyer une redirection au travers d'execvp ?
Merci d'avance pour vos éclairages,
Au cas où tu ne l'aurais pas remarqué, ni fork, ni exec ne ferment les file descriptors ouverts!
Alors tu établis les "directions" en ouvrant ou fermant les file descriptors avant d'appeler fork ou exec. (les | avant fork, les < et > avant exec).
Voir: pipe(2), open(2), close(2), dup(2) et dup2(2).
-- __Pascal Bourguignon__ http://www.informatimago.com/ You never feed me. Perhaps I'll sleep on your face. That will sure show you.
JKB <knatschke@koenigsberg.fr> writes:
Bonjour à tous,
J'utilise un appel système execvp dans un programme que je suis en train de
corriger.
execvp(arguments[0], arguments);
Une routine me lit la liste des arguments et cela fonctionne sans problème
sauf que... lorsque j'ai une redirection ">", ">&" "2>&1", cela n'est pas
traité. Par curiosité, j'ai fait un petit script de la forme :
#!/bin/bash
echo $1
echo $2
echo $3
exit 0
pour tester le truc... Les redirections n'apparaissent pas dans la liste
d'arguments, ce qui est somme toute assez logique. D'où ma question :
comment envoyer une redirection au travers d'execvp ?
Merci d'avance pour vos éclairages,
Au cas où tu ne l'aurais pas remarqué, ni fork, ni exec ne ferment les
file descriptors ouverts!
Alors tu établis les "directions" en ouvrant ou fermant les file
descriptors avant d'appeler fork ou exec. (les | avant fork,
les < et > avant exec).
Voir: pipe(2), open(2), close(2), dup(2) et dup2(2).
--
__Pascal Bourguignon__ http://www.informatimago.com/
You never feed me.
Perhaps I'll sleep on your face.
That will sure show you.
J'utilise un appel système execvp dans un programme que je suis en train de corriger.
execvp(arguments[0], arguments);
Une routine me lit la liste des arguments et cela fonctionne sans problème sauf que... lorsque j'ai une redirection ">", ">&" "2>&1", cela n'est pas traité. Par curiosité, j'ai fait un petit script de la forme :
#!/bin/bash
echo $1 echo $2 echo $3
exit 0
pour tester le truc... Les redirections n'apparaissent pas dans la liste d'arguments, ce qui est somme toute assez logique. D'où ma question : comment envoyer une redirection au travers d'execvp ?
Merci d'avance pour vos éclairages,
Au cas où tu ne l'aurais pas remarqué, ni fork, ni exec ne ferment les file descriptors ouverts!
Alors tu établis les "directions" en ouvrant ou fermant les file descriptors avant d'appeler fork ou exec. (les | avant fork, les < et > avant exec).
Voir: pipe(2), open(2), close(2), dup(2) et dup2(2).
-- __Pascal Bourguignon__ http://www.informatimago.com/ You never feed me. Perhaps I'll sleep on your face. That will sure show you.