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 du Club
    Inscrit en
    Novembre 2002
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 46
    Points : 43
    Points
    43
    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
    Membre à l'essai
    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
    Points : 11
    Points
    11
    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.
    VEILLE Julien
    developpeur
    38 - Grenoble

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 79
    Points : 37
    Points
    37
    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
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 79
    Points : 37
    Points
    37
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 4
    Points : 5
    Points
    5
    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+
    "Software is like sex, it's better when its free" © Linus Torvalds

  6. #6
    Provisoirement toléré
    Inscrit en
    Septembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 16
    Points : 17
    Points
    17
    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
    +
    --
    spycat, le chat qui pete plus vite que son ombre! ;o)

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 79
    Points : 37
    Points
    37
    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
    Provisoirement toléré
    Inscrit en
    Septembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 16
    Points : 17
    Points
    17
    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.
    --
    spycat, le chat qui pete plus vite que son ombre! ;o)

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  10. #10
    Provisoirement toléré
    Inscrit en
    Septembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 16
    Points : 17
    Points
    17
    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
    --
    spycat, le chat qui pete plus vite que son ombre! ;o)

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 46
    Points : 43
    Points
    43
    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