Voici mon code :

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;
}
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 "*".
(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 ?