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

POSIX C Discussion :

Afficher les droits d'un fichier


Sujet :

POSIX C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Afficher les droits d'un fichier
    Bonjour,
    J'essaye de recoder la fonction Ls et j'ai un petit soucis quant à l'affichage des droits.
    Le code que j'utilise pour les afficher est :
    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
     
    #include <sys/stat.h>
     
    void    put(char c)
    {
      write(1, &c, 1);
    }
     
    void    aff_right(const mode_t mode, struct stat *s)
    {
      if (S_ISDIR(s->st_mode))
        put('d');
      else
        put('-');
      (mode & S_IRUSR) ? put('r') : put('-');
      (mode & S_IWUSR) ? put('w') : put('-');
      (mode & S_IXUSR) ? put('x') : put('-');
      (mode & S_IRGRP) ? put('r') : put('-');
      (mode & S_IWGRP) ? put('w') : put('-');
      (mode & S_IXGRP) ? put('x') : put('-');
      (mode & S_IROTH) ? put('r') : put('-');
      (mode & S_IWOTH) ? put('w') : put('-');
      (mode & S_IXOTH) ? put('x') : put('-');
      put(' ');
    }
    Cependant voilà mon résultat suivit du résultat que me donne ls -la :
    Le miens:
    --w-----wx
    --w-r---wx
    --wx-wx-wx
    --wxrwx-wx
    dr--rw--wx
    -r-x--x-wx
    -r-xrw--wx
    -rw--w--wx
    -rw-rwx-wx
    -rwx-wx-wx
    -rwxrwx-wx
    ----rw--wx
    Lui obtenu avec ls -la:
    -rw-r--r--
    -rw-r--r--
    -rw-r--r--
    -rw-r--r--
    -rw-r--r--
    -rw-r--r--
    -rwxr-xr-x
    -rw-r--r--
    drwxr-xr-x
    -rw-r--r--
    -rw-r--r--
    -rw-r--r--
    Ca va bientôt faire 5 heures que je suis bloqué dessus et je ne vois absolument pas d'où viens le problème... pourriez-vous m'aider?
    Merci !

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 426
    Points : 43 044
    Points
    43 044
    Par défaut
    Sans les noms de fichiers, c'est difficile de voir.

    ton implémentation de ls et le vrai ls n'affichant pas forcement les fichiers dans le même ordre.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Sans les noms de fichiers, c'est difficile de voir.

    ton implémentation de ls et le vrai ls n'affichant pas forcement les fichiers dans le même ordre.
    Ils ne sont pas affichés dans le même ordre, mais par exemple j'ai des "xw" à chaque fin quand le vrai n'a qu'un "x"..

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 616
    Points
    23 616
    Par défaut
    Bonjour,

    Montre-nous la fonction qui appelle aff_right().

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    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
    int     aff_direct(int argc, char **argv)
    {
      DIR           *directory;
      struct dirent *read;
      struct stat   s;
      char          *str;
     
      str = malloc(sizeof(char) * 25);
      directory = opendir(".");
      if (directory == NULL)
        exit(1);
      count_total();
      while ((read = readdir(directory)) != NULL)
        {
               if (stat(read->d_name,&s) == -1)
            {
              perror("stat");
              exit(EXIT_FAILURE);
            }
               if (read->d_name[0] != '.')
                 {
                   aff_right();
                   printf("%d ", s.st_nlink);
                   aff_user();
                   aff_group();
                   printf("%d ", s.st_size);
                   str = (ctime(&s.st_mtime));
                   aff_acces(str);
                   printf("%s ", str);
                   printf("%s\n", read->d_name);
                 }
        }
      if (argc != 2)
        exit(1);
      if (closedir(directory) == (-1))
        exit(-1);
      return (0);
    }

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 616
    Points
    23 616
    Par défaut
    Citation Envoyé par SBRKH Voir le message
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void    aff_right(const mode_t mode, struct stat *s)
    {

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
               if (read->d_name[0] != '.')
                 {
                   aff_right();
                   printf("%d ", s.st_nlink);
                   aff_user();
    aff_right() attend deux arguments mais tu l'appelles sans passer ces arguments ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    aff_right() attend deux arguments mais tu l'appelles sans passer ces arguments ?
    Effectivement... ^^

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Au passage, les nombres magiques, caymal. Utilise STDOUT_FILENO comme descripteur de fichier à la place de 1.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/12/2007, 23h52
  2. Changer les droits d'un fichier sous windows
    Par lnikolanta dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 26/09/2005, 17h03
  3. Changer les droits d'un fichier downloadé
    Par aergil dans le forum ASP
    Réponses: 5
    Dernier message: 20/05/2005, 12h54
  4. Afficher les lignes d'un fichier
    Par pepere73 dans le forum C++
    Réponses: 16
    Dernier message: 21/02/2005, 22h25
  5. Réponses: 5
    Dernier message: 06/03/2003, 13h27

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