OVH Cloud OVH Cloud

execvp et redirection ">"

2 réponses
Avatar
JKB
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,

JKB

2 réponses

Avatar
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)

Avatar
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.