Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1428 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Passer une variable C en Shell avec un system()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passer une variable C en Shell avec un system()

n°1688349
So_H0use
Posté le 19-02-2008 à 12:16:13  profilanswer
 

Bonjour,
 
Mon probléme est le suivant :
 

Code :
  1. main()
  2. char username2=0


Code :
  1. printf("..::Creer un utilisateurs::.. \n \n" );
  2. printf("Veuillez entrer le nom de login: " );
  3. scanf("%s", &username2);
  4. system("/user/sbin/useradd %s", username2);


 
lorsque je compile j'ai l'erreur suivante :

Code :
  1. In function 'main'
  2. erreur: too many arguments to fonction 'system'


 
Info : Je suis sous mandriva 2008
 
Merci d'avance ;)


Message édité par So_H0use le 19-02-2008 à 13:38:56
mood
Publicité
Posté le 19-02-2008 à 12:16:13  profilanswer
 

n°1688350
matafan
Posté le 19-02-2008 à 12:53:47  profilanswer
 

Houlala
 
1) Tu penses pouvoir stocker une chaine dans un int ?
2) %c c'est pour un caractère, pas pour une chaine.
3) n'utilise pas scanf. Utilise plutôt fgets.
4) system prend une seule chaine de caractère en argument. Dans ton cas ça serait pas exemple system("/user/sbin/useradd toto" ). Bien sûr il faudra que tu génère la chaine en fonction de ce qui a été saisi par l'utilisateur. Tu peux utiliser sprintf pour ça.

n°1688351
black_lord
Truth speaks from peacefulness
Posté le 19-02-2008 à 13:32:42  profilanswer
 

Ce sujet a été déplacé de la catégorie OS Alternatifs vers la categorie Programmation par Black_lord


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1688355
So_H0use
Posté le 19-02-2008 à 13:37:46  profilanswer
 

Merci matafan, Peux tu m'expliquer comment sera la fonction avec un sprintf si j'ai pour utilisateur toto ?

n°1688363
Elmoricq
Modérateur
Posté le 19-02-2008 à 13:50:24  profilanswer
 

man sprintf :o
Mais mieux vaut privilégier snprintf, qui permet de contrôler la taille du buffer de sortie.
 
Sinon, main() doit explicitement retourner un int, username2 ne contient qu'un seul caractère tel que tu l'as déclaré, et scanf() çaÿ le mal utilisé comme ici.
 
Quant à system(), derrière il fait un sh -c "le parametre que tu as passé à system()".
 
Donc tu peux tout à fait passer plusieurs commandes d'un coup au shell, séparées par des points-virgule, et donc définir une variable d'environnement avant de lancer une commande.
 
Exemple :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char command[100];
  7.  
  8.   snprintf(command, 100, "taiste='%s' ; export taiste ; echo $taiste", "its teh mighty taiste" );
  9.  
  10.   system(command);
  11.  
  12.   return 0;
  13. }


 

$ gcc -Wall -pedantic taiste.c
$ a.out
its teh mighty taiste
$

n°1689684
Emmanuel D​elahaye
C is a sharp tool
Posté le 20-02-2008 à 20:33:49  profilanswer
 

Elmoricq a écrit :


Exemple :

Code :
  1. snprintf(command, 100, "taiste='%s' ; export taiste ; echo $taiste", "its teh mighty taiste" );
  2. }




Code :
  1. snprintf(command, 100, "taiste='%s' ; export taiste ; echo $taiste", "it's the mighty taiste" );


;)


Message édité par Emmanuel Delahaye le 20-02-2008 à 20:34:15

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1689822
Elmoricq
Modérateur
Posté le 21-02-2008 à 07:03:52  profilanswer
 

C'est une private joke [:god]
 
Par contre ça me fait penser, pour le coup de la variable d'environnement, ça m'était sorti de l'esprit mais sur un environnement POSIX.2, c'est quand même plus simple d'utiliser putenv() [:dawa]

n°1690036
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-02-2008 à 12:50:32  profilanswer
 

Elmoricq a écrit :

C'est une private joke


Il y avait des fautes dans le texte anglais...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1690048
Elmoricq
Modérateur
Posté le 21-02-2008 à 13:08:44  profilanswer
 

C'est justement ça, la private joke, écrire "teh" au lieu de "the" (et its au lieu de it's). [:joce]

Message cité 1 fois
Message édité par Elmoricq le 21-02-2008 à 13:09:10
n°1690426
Emmanuel D​elahaye
C is a sharp tool
Posté le 22-02-2008 à 02:39:55  profilanswer
 

Elmoricq a écrit :

C'est justement ça, la private joke, écrire "teh" au lieu de "the" (et its au lieu de it's). [:joce]


Ah, je suis largué, je dois être trop vieux.  


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Passer une variable C en Shell avec un system()

 

Sujets relatifs
EXCEL VBA - Addition de cellule et de variable !shell
Passer des bytes d'une applet à une servletPb de passage de variable
Variable et phpComment creer un system de META TAG ??
passer une variable provenant d'un fetch-array dans une req. sqlproblème avec une variable de session
[WINRAR]Variable chemin d'autoextraction 
Plus de sujets relatifs à : Passer une variable C en Shell avec un system()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR