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 :

conversion droits d'acces aux fichiers en octal


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut conversion droits d'acces aux fichiers en octal
    Bonjour,

    j'ai un problème avec la conversion des droits d'accès aux fichier sous Linux ( programmant en C ).
    Je veux afficher les droits en octal alors dans mon programme j'ai introduit cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%o\n",fileStat.st_mode);
    le probleme c'est que les droits s'affichent mais avec trois chiffres supplémentaires à gauche exemple 100664.(les chiffres supplémentaires sont 100 ).

    Y'a t-il quelqu'un qui peut m'aider sur ça.

    Merci d'avance.

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Il y a d'autres propriétés que les droits user-group-other du fichier.
    Ce que tu vois pourrai être le sticky bit ou quelque chose comme ca.

    (je n'ai pas envie de faire moi-même ta recherche google )
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    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 519
    Points
    41 519
    Par défaut
    Dans la doc:
    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
           POSIX refers to the st_mode bits corresponding to the mask S_IFMT
           (see below) as the file type, the 12 bits corresponding to the mask
           07777 as the file mode bits and the least significant 9 bits (0777)
           as the file permission bits.
    
           The following mask values are defined for the file type of the
           st_mode field:
    
               S_IFMT     0170000   bit mask for the file type bit field
    
               S_IFSOCK   0140000   socket
               S_IFLNK    0120000   symbolic link
               S_IFREG    0100000   regular file
               S_IFBLK    0060000   block device
               S_IFDIR    0040000   directory
               S_IFCHR    0020000   character device
               S_IFIFO    0010000   FIFO
    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.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CANADG Voir le message
    le probleme c'est que les droits s'affichent mais avec trois chiffres supplémentaires à gauche exemple 100664.(les chiffres supplémentaires sont 100 ).
    Bonjour

    Les droits d'un fichier s'étendent sur 12 bits qui représentent (de la droite vers la gauche)
    • le rwx other, puis le rwx group et rwx owner (en fait, pour être rigoureux, c'est plutôt xwr puisque j'ai dit que je les présentais de la droite vers la gauche mais je simplifie en disant "rwx")
    • 3 bits spéciaux (setuid, setgid et sticky-bit) (idem remarque précédente)

    Il reste donc 4 bits inutilisés (ce qui fait donc 10 et non 100 comme tu le dis car le 3° "0" fait bien partie des droits et représente en fait les bits spéciaux). Les programmeurs Unix en ont donc profité pour y rajouter des flags caractérisant le type de fichier (fichier régulier, répertoire, pipe, socket, lien symbolique, spécial bloc, spécial caractère et reste encore 9 possibilités de libres)

    Si tu veux juste afficher les droits, il te faut alors masquer le champ "st_mode" via un "&" logique sur les 12 premiers bits (mais le plus propre est alors d'utiliser l'inverse binaire de S_IFMT)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par ternel Voir le message
    Il y a d'autres propriétés que les droits user-group-other du fichier.
    Ce que tu vois pourrai être le sticky bit ou quelque chose comme ca.

    (je n'ai pas envie de faire moi-même ta recherche google )
    Bonjour,
    Oui normalement c'est ça mais comment faire pour enlever les bits dont j'ai pas besoin ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Les droits d'un fichier s'étendent sur 12 bits qui représentent (de la droite vers la gauche)
    • le rwx other, puis le rwx group et rwx owner (en fait, pour être rigoureux, c'est plutôt xwr puisque j'ai dit que je les présentais de la droite vers la gauche mais je simplifie en disant "rwx")
    • 3 bits spéciaux (setuid, setgid et sticky-bit) (idem remarque précédente)

    Il reste donc 4 bits inutilisés (ce qui fait donc 10 et non 100 comme tu le dis car le 3° "0" fait bien partie des droits et représente en fait les bits spéciaux). Les programmeurs Unix en ont donc profité pour y rajouter des flags caractérisant le type de fichier (fichier régulier, répertoire, pipe, socket, lien symbolique, spécial bloc, spécial caractère et reste encore 9 possibilités de libres)

    Si tu veux juste afficher les droits, il te faut alors masquer le champ "st_mode" via un "&" logique sur les 12 premiers bits (mais le plus propre est alors d'utiliser l'inverse binaire de S_IFMT)

    Bonjour,
    Oui exactement je veux afficher que les droits, mais j'ai pas tres bien compris ta technique (puisque je suis debutant en programmation ) et en plus je veux afficher le type du fichier, ce qui donne comme resultat : f644 : pour un fichier regulier ayant les droits rw-r--r--.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Dans la doc:
    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
           POSIX refers to the st_mode bits corresponding to the mask S_IFMT
           (see below) as the file type, the 12 bits corresponding to the mask
           07777 as the file mode bits and the least significant 9 bits (0777)
           as the file permission bits.
    
           The following mask values are defined for the file type of the
           st_mode field:
    
               S_IFMT     0170000   bit mask for the file type bit field
    
               S_IFSOCK   0140000   socket
               S_IFLNK    0120000   symbolic link
               S_IFREG    0100000   regular file
               S_IFBLK    0060000   block device
               S_IFDIR    0040000   directory
               S_IFCHR    0020000   character device
               S_IFIFO    0010000   FIFO
    Bonjour,
    Mon but est d'afficher que les droits et j'arrive pas à le faire (puisque je suis debutant en programmation ) et en plus je veux afficher le type du fichier, ce qui donne comme resultat : f644 : pour un fichier regulier ayant les droits rw-r--r--.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CANADG Voir le message
    Bonjour,
    Une fois suffit voyons !!!

    Citation Envoyé par CANADG Voir le message
    Citation Envoyé par Sve@r Voir le message
    Si tu veux juste afficher les droits, il te faut alors masquer le champ "st_mode" via un "&" logique sur les 12 premiers bits (mais le plus propre est alors d'utiliser l'inverse binaire de S_IFMT)
    Oui normalement c'est ça mais comment faire pour enlever les bits dont j'ai pas besoin ?
    Tu lis les messages ???

    Citation Envoyé par CANADG Voir le message
    Mon but est d'afficher que les droits et en plus je veux afficher le type du fichier, ce qui donne comme resultat : f644 : pour un fichier regulier ayant les droits rw-r--r--.
    Pour le type de fichier: si ((fileStat.st_mode & S_IFREG) == S_IFREG) alors "f" sinon "pas f". Et pareil avec tous les autres flags "S_IFSOCK" (socket), "S_IFLNK" (lien) etc. Les flags se lisent d'ailleurs ainsi: IFREG = if régular.
    Mais pour éviter ces "if" à la suite, perso j'utiliserais plutôt un tableau de structures crée à cet effet contenant un int et un char
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct {
        int flag;
        char c;
    } t_type;
     
    t_type tabType[]={
        {S_IFREG, 'f'},
        {S_IFSOCK, 's'},
        {S_IFLNK, 'l'},
        {..., ...},
        {0, 0},
    }
    Ensuite une simple boucle qui parcours le tableau et qui teste sur le champ 1 et si c'est bon, positionne le champ 2. Ca a l'avantage d'être modulaire et évolutif...
    Pour le 644: printf("%o", fileStat.st_mode & (~S_IFMT)).

    Citation Envoyé par CANADG Voir le message
    et j'arrive pas à le faire (puisque je suis debutant en programmation )
    Tu as bien conscience que cette excuse ne te servira pas toute ta vie ? Et qu'être débutant ne t'empêche pas de lire des bouquns de C !!! (en fait, ce serait même plutôt une des raisons majeure qui devrait pousser quiconque à ouvrir un livre)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup pour ton aide . c'est reglé

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

Discussions similaires

  1. Droits d'accès aux fichiers
    Par Razgriz dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 03/07/2007, 15h55
  2. Réponses: 6
    Dernier message: 21/04/2007, 20h08
  3. Droits d'acces aux fichiers dans dossier en partage
    Par catoucat dans le forum Windows XP
    Réponses: 3
    Dernier message: 03/07/2006, 02h47
  4. [Configuration] droits d'accès aux fichiers
    Par drommk dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 20/06/2006, 17h31
  5. [Tomcat]Droit d'accès aux fichiers créés par une servlet
    Par loulouleboss dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 15/07/2004, 14h32

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