IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Commande who en C


Sujet :

Linux

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 118
    Points : 102
    Points
    102
    Par défaut Commande who en C
    Bonjour,

    J'aurais besoin d'implémenter la commande bash who en C toujours sous Linux. Je ne trouve aucune doc la dessus.

    Je m'explique. J'ai un serveur qui tourne sur ma machine Linux. Un client se connecte sur ma machine avec comme argument un nom de login. Le serveur prend cet argument et fait une sorte de "who | grep $1" où $1 est donc argv[1].

    J'ai bien essayé de faire avec la fonction system() et sprintf pour créer la commande mais j'ai une erreur de segmentation. Je pense que ca vient des caractères de fin de lignes.

    Voici le bout de code qui fait cela :
    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
     
        printf("***** Nouveau Client *****\n");
     
        if( (size_buffer = recv(sock_client, buffer, sizeof(buffer)-1, 0)) == -1 ){
                perror("***** Erreur recv *****");
                exit(1);
        }
     
        buffer[size_buffer] = '\0';
     
        printf("Nom d'utilisateur recu : %s\n", buffer);
     
        sprintf(commande,"who | grep %s", buffer);
     
        system(commande);
    Pouvez-vous m'aider ?

    Merci par avance
    carnibal

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Comment sont déclarés buffer et commande ?

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 118
    Points : 102
    Points
    102
    Par défaut
    buffer est déclaré :
    et commande:

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    Les libraires systemes de Linux permettent de faire cela tres simplement :

    • getuid() : permet d'obtenir l'user id de l'utilisateur
    • getpwuid : permet d'obtenir les informations utilisateurs relatives a un user id (informations de /etc/passwd)


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <unistd.h>
    #include <sys/types.h>
    #include <pwd.h>
    #include <stdio.h>
     
    int main()
    {
      struct passwd *pws;
     
      pws = getpwuid(getuid());
      printf(" %-8.8s \n", pws->pw_name);
    }
    pws->pw_name contient le nom de l'utilisateur.

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Citation Envoyé par CARNIBAL Voir le message
    et commande:
    Est-ce que tu malloc() bien commande avant le sprintf ?

    andr386 : La commande "who" liste tous les utilisateurs loggés sur la machine.

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 123
    Points
    28 123
    Par défaut
    Bonjour,

    Si tu veux refaire la commande who, tu dois parser les fichiers systemes (utmpx, wtmpx).

    Je te conseille de regarder du cote de getutxent pour recuperer les donnes, et de faire le tri sur le champs ut_type (qui doit etre USER_PROCESS si mes souvenirs sont bons).

    Algo basique (bah oui, je ne vais pas te donner le code tout fait, ca serait pas drole) :

    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
     
    initialisation via un appel a la bonne fonction
     
    Tant que getutxent() ne renvoie pas d'erreur
    {
      si on est du type USER_PROCESS
      {
        afficher les donnes souhaitees
      }
      sinon
      {
        continuer la boucle 
      }
    }
     
    finaliser via un appel a la bonne fonction
     
    fin

Discussions similaires

  1. Commandes who & read
    Par Leely_ dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 18/06/2013, 09h31
  2. Programmation de la commande who en C
    Par theserial_p dans le forum Linux
    Réponses: 4
    Dernier message: 18/06/2009, 12h39
  3. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo