Forum Programmation.c introduire variable

Posté par  .
Étiquettes : aucune
0
26
juin
2006
salut a tous
j'ai petit probleme, je fait un programme en c qui rentre le nom d'utilisateur d'une société pour des comptes internet sur un serveur samba (y en a plus de 2000, un peu long à la main). le programme va chercher le nom des utilisateur dans un .txt, le prog fait appel à un .sh pour ajouter les utilisateurs.

voici le programme c :

int main(int argc, char *argv[])
{
int i;
char ajout[20] = "";;
FILE* fichier = NULL;
fichier = fopen("/srv/samba/netlogon/prenom-nom.txt", "r");
if (fichier != NULL)
{
for(i=1;i<2;i++)
{
fgets(chaine, "\n", fichier);
system("/srv/samba/netlogon/ajoutuser.sh [....chaine.....]");

//j'aimerai que le nom de la personne contenu dans [.......chaine.......] s'affiche dans la console mais system() ne veut pas plus d'un argument
}
fclose(fichier);
}
return 0;



voici mon fichier shell :

adduser $1
useradd -G dom_users -m -d /srv/samba/home/$1 -c $1 -s /bin/false $1
echo -e "azerty\nazerty" | smbpasswd -a $1 -s
pdbedit --pwd-can-change-time 0 $1
pdbedit --pwd-must-change-time 0 $1


Est-ce qu'il existe une autre fonction que system() pour ouvrir la console et entré une variable introduite dans mon prog??
Merci d'avance pour vos réponses
  • # Pourquoi en C ???

    Posté par  . Évalué à 7.

    Quel est l'interet de faire ce programme en C qui ne sert ... qu'a lancer un programme en shell ??

    tu devrait tout faire en shell, ou en perl c'est le langage le plus indiqué pour ces taches d'admin systeme.

    en shell ça pourrait donner:
    cat /srv/samba/netlogon/prenom-nom.txt | while read CHAINE
    do
    /srv/samba/netlogon/ajoutuser.sh "${CHAINE}"
    done


    plus simple que de compiler un truc en C ...
  • # Intérêt d'un programme en C ?

    Posté par  . Évalué à 7.

    Hello,
    Je risque de répondre à côté de la plaque, mais quel est l'intérêt de ce programme en C qui appelle un shell ?
    Je sais bien que ça ne répond pas à ta question, mais il me semble qu'un simple shell peut faire ça sans soucis. Il suffit de lire un fichier ligne par ligne et d'envoyer chaque entrée à ton script-shell.
    Par exemple :

    for i in `cat /srv/samba/netlogon/prenom-nom.txt`
    do
    echo "Ajout de l'utilisateur $i"
    /srv/samba/netlogon/ajoutuser.sh $i
    done

    Voilà...
    • [^] # Re: Intérêt d'un programme en C ?

      Posté par  . Évalué à 2.

      attention quand meme avec le `cat /srv/samba/netlogon/prenom-nom.txt`
      le shell va remplacer cela par le contenu du fichier. Si le fichier est looooong, cela ne tiendra pas sur la ligne de commande et les derniers enregistrements ne seront pas traités.
      amha, il vaut mieux utiliser un | (pipe) comme montré dans mon exemple au dessus.
  • # merci

    Posté par  . Évalué à 2.

    je vous remercie pour les réponses c'est sympathique. j'ai toujours tendance à me compliquer la vie :s
    encore merci je vais essayer cela
  • # post inutile, mais bon ...

    Posté par  . Évalué à 1.

    Un truc que je comprend pas dans ton code. Pourquoi "\n" en deuxième argument de fgets() ? man 3 fgets nous dis que c'est la size de la chaine.

    Autrement, pour être logique, faudrait parser le nom d'utilisateur entre fgets() et system(). Bon, ya aussi que tu déclares un ajout[20] et t'utilises un "chaine" qui j'imagine est un char* ou char tab[20].

    Pour ta question => oui. man 3 execv.

    J'imagine que c'était un truc vite fait a la rache, mais quand même :)

    Sinon, d'accord avec les autres, un mini coup de perl ou de bash serais BCP plus simple et adapté pour ce genre de truc.
  • # utilise perl

    Posté par  (site web personnel) . Évalué à 1.

    c'est typiquement des séquences qui peuvent être facilement mise en oeuvre sous Perl...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.