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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    18 410
    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 : 18 410
    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 averti
    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
    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
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 527
    Par défaut
    Bonjour,

    Montre-nous la fonction qui appelle aff_right().

  5. #5
    Membre averti
    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
    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
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 527
    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 averti
    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
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    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: 02/12/2007, 00h52
  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, 18h03
  3. Changer les droits d'un fichier downloadé
    Par aergil dans le forum ASP
    Réponses: 5
    Dernier message: 20/05/2005, 13h54
  4. Afficher les lignes d'un fichier
    Par pepere73 dans le forum C++
    Réponses: 16
    Dernier message: 21/02/2005, 23h25
  5. Réponses: 5
    Dernier message: 06/03/2003, 14h27

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