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

Linux Discussion :

Afficher les droits d'un fichier sous la forme rwxrwxrwx


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Afficher les droits d'un fichier sous la forme rwxrwxrwx
    Salut à tous,

    Je programme en C, et je cherche désespérément à afficher à la façon de ls -l les droits d'un fichier comme "rw-rw-rw-".

    Mon programme récupère grâce à stat les permissions dans un "mode_t rights", avec lequel il est facile de déterminer le type du fichier (on fait appel à la macro S_ISREG etc) mais je ne comprend pas comment me servir des macros S_IRWXU et compagnie.

    Après avoir lu et relu les pages du man, et avoir pas mal chercher sur internet, je m'en remet à vous !

    merci d'avance


    EDIT : merci pour avoir bien placé mon sujet, je suis un peu perdu

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BenjaminN Voir le message
    Salut à tous,

    Je programme en C, et je cherche désespérément à afficher à la façon de ls -l les droits d'un fichier comme "rw-rw-rw-".

    Mon programme récupère grâce à stat les permissions dans un "mode_t rights", avec lequel il est facile de déterminer le type du fichier (on fait appel à la macro S_ISREG etc) mais je ne comprend pas comment me servir des macros S_IRWXU et compagnie.

    Après avoir lu et relu les pages du man, et avoir pas mal chercher sur internet, je m'en remet à vous !

    merci d'avance


    EDIT : merci pour avoir bien placé mon sujet, je suis un peu perdu
    Ben en fait, la variable "rights" qui fait 16 bits utilise 4 bits pour gérer le type du fichier et 12 bits pour gérer les droits (sstrwxrwxrwx).
    Ca signifie que si ta variable contient la valeur "xxxx000111101001" cela veut dire que t'as les droits "rwxr-x--x" (les 4 "x" étant les bits indiquant le type du fichier et donc sans importance en ce qui concerne les droits...)

    Donc pour extraire un droit quelconque, il te faut utiliser les masques de bits avec "&". Par exemple "rights & 0400" te renverra "1" si le droit "r" du user est à "1" et "0" sinon.
    Comme la valeur "0400" est 1) difficile à traduire et 2) suceptible d'évoluer, il a été créé un paquet de macros plus parlantes que ces chiffres et qui peuvent évoluer avec Unix/Linux (si les droits changent demain par exemple)

    Donc voici:
    - rights & S_IFMT => te renvoie la valeur "rights" sans les droits => il ne te reste que le type. A l'inverse rights & ~S_IFMT => te renvoie que les droits et supprime le type
    - rights & S_IRUSR => te renvoie "1" si le "read user" est positionné
    - rights & S_IWUSR => te renvoie "1" si le "write user" est positionné
    - rights & S_IXUSR => te renvoie "1" si le "exec user" est positionné
    - rights & S_IRWXU => te renvoie "1" si tous les droits du "user" sont positionnés
    - rights & S_IRGRP => te renvoie "1" si le "read group" est positionné
    - rights & S_IWGRP => te renvoie "1" si le "write group" est positionné
    - rights & S_IXGRP => te renvoie "1" si le "exec group" est positionné
    - rights & S_IRWXG => te renvoie "1" si tous les droits du "group" sont positionnés
    - rights & S_IROTH => te renvoie "1" si le "read other" est positionné
    - rights & S_IWOTH => te renvoie "1" si le "write other" est positionné
    - rights & S_IXOTH => te renvoie "1" si le "exec other" est positionné
    - rights & S_IRWXO => te renvoie "1" si tous les droits du "other" sont positionnés
    - rights & S_ISUID => te renvoie "1" si le "setuid" est positionné
    - rights & S_ISGID => te renvoie "1" si le "setgid" est positionné
    - rights & S_ISVTX => te renvoie "1" si le "sticky bit" est positionné

    Ensuite on peut enchaîner => rights & S_IRUSR & S_IRGRP => te renvoie "1" si le "read user" et le "read group" sont positionnés...

    Attention à l'affichage des bits spéciaux. Une lettre minuscule indique la présence du droit "x" mais masqué par le bit spécial et une lettre majuscule indique l'abscence du droit "x"...

    Plus d'infos ici: http://man.cx/stat(2)/fr

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    je te remercie je vais étudier tout ca et je te tiens au courant.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    ca marche à la perfection je te remercie milles fois pour tes explications complètes.
    par contre je ne comprend pas à quoi sert l'option -d que je suis censé traiter : elle m'affiche systématiquement "." quand je fais un ls -d !

    de plus je ne comprend pas ce que signifie le Total 25 au début du ls -l.

    Donc si tu te sens de m'aider... sinon je chercherais !

    merci encore, salut !

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par BenjaminN Voir le message
    de plus je ne comprend pas ce que signifie le Total 25 au début du ls -l.
    Lorsque l'option -l est fournie, chaque liste est précédée d'une ligne indiquant la taille totale des fichiers de la liste, exprimée en blocs de 512 octets.
    Cordialement.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BenjaminN Voir le message
    ca marche à la perfection je te remercie milles fois pour tes explications complètes.
    par contre je ne comprend pas à quoi sert l'option -d que je suis censé traiter : elle m'affiche systématiquement "." quand je fais un ls -d !

    de plus je ne comprend pas ce que signifie le Total 25 au début du ls -l.

    Donc si tu te sens de m'aider... sinon je chercherais !

    merci encore, salut !
    Si tu tapes "ls" pour un répertoire (style "ls /etc") ça t'affichera tous les fichiers du répertoire et non le répertoire lui-même. Pour avoir le répertoire et non son contenu faut mettre l'option "-d".

    Sinon "total 25" ben t'as la réponse plus haut...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je comprend toujours pas "total" :
    je fais la somme de tous les int blocks de tous les fichiers a afficher, et je l'affiche.
    j'obtiens quelque chose de coherent mais different du ls du systeme, souvent le double du total affiche par le ls du systeme;
    est-ce que cela depend de la machine sur laquelle je suis ? (sur le nombre de bits de mon processeur ?) si quelqu'un peut m'en dire un peu plus ce serait top

    oh et je comprend pas "ls -l /dev", j'obtiens une colonne en plus que dans un ls -l normal, du genre :
    crw-r----- 1 root operator 4, 16 Nov 30 06:16 acd0
    crw-r--r-- 1 root wheel 243, 0 Nov 30 06:16 acpi
    crw-r----- 1 root operator 4, 10 Nov 30 06:16 ad0

    si quelqu'un a une idee ca me sauverait !

    merci d'avance

  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 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BenjaminN Voir le message
    oh et je comprend pas "ls -l /dev", j'obtiens une colonne en plus que dans un ls -l normal, du genre :
    crw-r----- 1 root operator 4, 16 Nov 30 06:16 acd0
    crw-r--r-- 1 root wheel 243, 0 Nov 30 06:16 acpi
    crw-r----- 1 root operator 4, 10 Nov 30 06:16 ad0

    si quelqu'un a une idee ca me sauverait !

    merci d'avance
    Tu devrais te renseigner sur la structure d'un système de fichier sous Unix et les différentes caractéristiques des fichiers
    Les périphériques Unix (clavier, écran, disque, etc) sont gérés par des fichiers spéciaux. Ils sont de type "bloc" (IO faite par buffer) ou "caractère" (IO faite car. par car.).
    Chaque fichier spécial est identifié par un n° majeur (type de périphérique) et n° mineur (n° d'ordre du périphérique en question)

    Quand tu fais un "ls -l" sur un fichier de ce type, la commande n'affiche pas la taille (cela n'a aucun sens car un point IO d'un périphérique n'a pas de taille) mais lesdits n°

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je vais étudier tout ca je vous tiens au courant !

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

Discussions similaires

  1. Afficher les barres de défilement (scrollbar) sous FF
    Par _Mac_ dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/11/2005, 14h51
  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