Voici mon code :
Si je tente grace à ce code d'executer la commande "cp * ../test" pour copier le contenu du repertoire a partir duquel j'execute mon pg, cela échoue, il ne trouve pas "*".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include <stdio.h> #include <stdlib.h> int main ( int argc, char *argv[] ) { int retour=0; char *arg []={"cp","*",argv[1],NULL}; if ( argc== 1) { execv("/bin/cp",arg); } else { printf ( "usage : argument1 arg1\n" ); } /* Jamais execute si ma commande à été exécuté mais bon c'est juste pour tester ! */ return EXIT_SUCCESS; }
(je lance le pg en ecrivant ./nomDuPg ../test en me plaçant dans le repertoire de mon exe)
En revanche si je spécifie un nom de fichier au lieu de * cela fonctionne bien.
Je pense savoir d'ou cela provient :
Si je tape cp * ../test dans une console, le shell "traduit" le caractere * en la liste des fichier du repertoire avant (entre autre) d'exécuter /bin/cp avec ces noms comme parametre.
Lorsque j'utilise execv je donne directement comme parametre à cp "*" qui n'est pas traduit par le shell en la liste des fichiers du repertoire.
Mes questions :
- Mon interprétation est-elle correcte ? En effet j'ai trouvé sur plusieurs sites des personnes qui utilise execv avec * pour copier tout le repertoire par exemple. Donc si ca marche chez eux pourquoi pas chez moi ?
- Quelle est la solution pour grace à exec pouvoir utiliser les caratères spéciaux du shell dans une commande ?
Partager