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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    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
    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]

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

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

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    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 Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    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...
    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]

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    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

+ 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