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

C Discussion :

Reprogrammer la commande ls à partir de la fonction stat


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 46
    Par défaut Reprogrammer la commande ls à partir de la fonction stat
    Mon problème :
    je dois reprogrammer la commande "ls -l fichier" à l'aide d'un programme en C utilisant la commande C.
    En gros, je vois comment ça se passe sauf que la fonction stat me paraît un peu abstraite à mes yeux et je ne trouve pas de doc à ce sujet. Quelq'un pourrait m'aider ?

    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 10
    Par défaut
    Pardon, j'ai mal lu ta question et je ne te répond pas ce que tu veux.

    En C :
    Vas voir ton fichier /usr/include/sys/stat.h pour regarder le prototype de la fonction stat.
    Sinon, tu peux taper .


    Salut.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 79
    Par défaut
    j'ai deja recodé ls et meme un shell UNIX, si tu veux je t'envoi le code pour la fonction ls

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 79
    Par défaut
    je met le code ici comme ca tout le monde en profite :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include "my.h"
    #include "t_list.h"
     
    void            print_rights(struct stat dp)
    {
      ((dp.st_mode & S_IFDIR) != 0) ? putstr("d") : putstr("-");
      ((dp.st_mode & S_IRUSR) != 0) ? putstr("r") : putstr("-");
      ((dp.st_mode & S_IWUSR) != 0) ? putstr("w") : putstr("-");
      ((dp.st_mode & S_IXUSR) != 0) ? putstr("x") : putstr("-");
      ((dp.st_mode & S_IRGRP) != 0) ? putstr("r") : putstr("-");
      ((dp.st_mode & S_IWGRP) != 0) ? putstr("w") : putstr("-");
      ((dp.st_mode & S_IXGRP) != 0) ? putstr("x") : putstr("-");
      ((dp.st_mode & S_IROTH) != 0) ? putstr("r") : putstr("-");
      ((dp.st_mode & S_IWOTH) != 0) ? putstr("w") : putstr("-");
      ((dp.st_mode & S_IXOTH) != 0) ? putstr("x") : putstr("-");
    }
     
    int     ls_l(char *directory)
    {
      DIR   *dir;
      struct dirent *dirent;
      struct stat   *sb;
      struct passwd *passwd;
      struct group  *grp;
      char          *mtime;
     
      dirent = malloc(sizeof (*dirent));
      sb = malloc(sizeof (*sb));
      passwd = malloc(sizeof (*passwd));
      grp = malloc(sizeof(*grp));
      chdir(directory);
      dir = opendir(".");
      if(!directory)
        {
          exit(0);
        }
      putstr("total");
      putchar('\n');
      while((dirent = readdir(dir)) != 0)
        {
          if ((dirent->d_name[0] != '.'))
            {
              stat(dirent->d_name, sb);
              passwd = getpwuid(sb->st_uid);
              putchar(' ');
              print_rights(*sb);
              putstr("   ");
              putnbr(sb->st_nlink);
              putstr("  ");
              putstr(passwd->pw_name);
              putchar(' ');
              grp = getgrgid(sb->st_gid);
              putstr(grp->gr_name);
              putchar(' ');
              putnbr(sb->st_size);
              putstr(" ");
              mtime = ctime(&(sb->st_mtimespec.tv_sec));
              write(1, mtime + 4, 12);
              putstr(" ");
              putstr(dirent->d_name);
              putchar('\n');
            }
        }
      closedir(dir);
    }
    voila, j'espere que ca t'aidera ;)
     
    @+

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 4
    Par défaut
    Je ne pense pas qu'en lui fournissant le code sur un plateau tu l'aide beaucoup. Il faut lui donner des pistes pas un code source !

    A+

  6. #6
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 16
    Par défaut
    Citation Envoyé par -keiji-
    Je ne pense pas qu'en lui fournissant le code sur un plateau tu l'aide beaucoup. Il faut lui donner des pistes pas un code source !
    et puis penser a changer le nom des fonction
    my_putchar();
    my_putnbr();
    my_putstr();
    tout le monde ne sais pas ce que c'est
    +

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 79
    Par défaut
    j'ai changé le nom des fonctions.
    -keiji- j'ai préféré lui donner le code source car il est pas long et facile a comprendre. Et si il est un peu intelligent (ce que je suppose) il va pas faire un bête copier / coller du code, mais essayer de le comprendre.
    De plus tout n'est pas codé là.
    @+

  8. #8
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 16
    Par défaut
    Citation Envoyé par cemoi
    De plus tout n'est pas codé là.
    @+
    t'as coder l'option :
    ls -R
    quelque part ? hu hu.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 79
    Par défaut
    spycat non je l'ai pas codé, mais il manque le main, et le ls normal...

  10. #10
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 16
    Par défaut
    Citation Envoyé par cemoi
    spycat non je l'ai pas codé, mais il manque le main, et le ls normal...
    humm, je pense pas que ca pause plus de problemes que le ls -l ou -R de coder le main :d

  11. #11
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 46
    Par défaut
    Merci pour vos réponses.
    Je débute en ce qui concerne les appels systèmes en C, mais ça vient bon.
    Je viens de finir ls -lia et je m'attaque à pwd et c'est ma joie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer une commande isql à partir d'un autre poste
    Par doudou10000 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/10/2005, 15h43
  2. Lancer des commandes dos à partir d'un fichier texte
    Par tpdm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2005, 16h56
  3. Réponses: 5
    Dernier message: 15/07/2005, 11h25
  4. Réponses: 4
    Dernier message: 08/06/2004, 09h01
  5. Réponses: 1
    Dernier message: 30/04/2004, 11h36

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