Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

File::stat et champ mode

7 réponses
Avatar
Patrice Karatchentzeff
Salut,

Je n'arrive pas à trouver de la doc sur comment est écrit cette
variable en retour... c'est beau d'écrire que c'est le « mode du
fichier (type et permission) » mais je n'arrive pas à recoller cela
avec le mode UNIX...

Manifestement, cette variable est retournée sur 5 chiffres et (par
exemple), le 0660 « UNIX » vaut 33200...

Quelqu'un a-t-il le mode d'emploi ?

Merci

PK

--
      |\      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:p.karatchentzeff@free.fr
     |,4-  ) )-,_. ,\ (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'\_)       

7 réponses

Avatar
Ronan Le Hy
Patrice Karatchentzeff writes:

Je n'arrive pas à trouver de la doc sur comment est écrit cette
variable en retour... c'est beau d'écrire que c'est le « mode du
fichier (type et permission) » mais je n'arrive pas à recoller cela
avec le mode UNIX...


perldoc -f stat

% perl -le 'printf "Permissions are %04on", 33200 & 07777;
Permissions are 0660

HTH

--
Ronan

Avatar
Patrice Karatchentzeff
Ronan Le Hy writes:

Patrice Karatchentzeff writes:

Je n'arrive pas à trouver de la doc sur comment est écrit cette
variable en retour... c'est beau d'écrire que c'est le « mode du
fichier (type et permission) » mais je n'arrive pas à recoller cela
avec le mode UNIX...


perldoc -f stat

% perl -le 'printf "Permissions are %04on", 33200 & 07777;
Permissions are 0660


Oui, j'avais lu cela aussi ;-)

Mais je ne comprends pas comment le manipuler... Je voudrais à partir
de stat->mode récupérer une variable « à la UNIX »...

$unixmode = ??stat($file)->mode

de façon à pouvoir manipuler et tester les droits normalement...

Bon, j'ai trouvé : il suffit de l'écrire pour que cela vienne ;-)

my $unixmode = printf "%04o", stat("/home/pk/test.pl")->mode & 07777 ;

(c'est bien un truc tordu cela dit)

Merci

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       


Avatar
Eric Jacoboni
Patrice Karatchentzeff writes:

Bon, j'ai trouvé : il suffit de l'écrire pour que cela vienne ;-)

my $unixmode = printf "%04o", stat("/home/pk/test.pl")->mode & 07777 ;

(c'est bien un truc tordu cela dit)


C'est pas tordu : le "mode" est formé du type du fichier et des
permissions : tu ne veux que les permissions, c'est donc normal de
retravailler le résultat obtenu.

--
Éric Jacoboni, né il y a 1380306801 secondes

Avatar
Patrice Karatchentzeff
Eric Jacoboni writes:

Patrice Karatchentzeff writes:

Bon, j'ai trouvé : il suffit de l'écrire pour que cela vienne ;-)

my $unixmode = printf "%04o", stat("/home/pk/test.pl")->mode & 07777 ;

(c'est bien un truc tordu cela dit)


C'est pas tordu : le "mode" est formé du type du fichier et des
permissions : tu ne veux que les permissions, c'est donc normal de
retravailler le résultat obtenu.


D'accord ; ce qui est tordu est de ne pas avoir les permissions
directement. C'est un truc basique du shell et je ne comprends
pourquoi cela n'a pas été extrait simplement (d'autant plus que le nom
est trompeur : mode représente traditionnellement les droits).

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       


Avatar
Eric Jacoboni
Patrice Karatchentzeff writes:

D'accord ; ce qui est tordu est de ne pas avoir les permissions
directement. C'est un truc basique du shell et je ne comprends
pourquoi cela n'a pas été extrait simplement (d'autant plus que le
nom est trompeur : mode représente traditionnellement les droits).


Ben non... La fonction stat(2), sur laquelle celle de Perl repose,
remplit une struct stat dans laquelle le champ st_mode est exactement
ça : une combinaison du type de fichier et de ses permissions.

C'est pareil aussi en Python et en Ruby.


--
Éric Jacoboni, né il y a 1380321414 secondes

Avatar
Patrice Karatchentzeff
Eric Jacoboni writes:

Patrice Karatchentzeff writes:

D'accord ; ce qui est tordu est de ne pas avoir les permissions
directement. C'est un truc basique du shell et je ne comprends
pourquoi cela n'a pas été extrait simplement (d'autant plus que le
nom est trompeur : mode représente traditionnellement les droits).


Ben non... La fonction stat(2), sur laquelle celle de Perl repose,
remplit une struct stat dans laquelle le champ st_mode est exactement
ça : une combinaison du type de fichier et de ses permissions.

C'est pareil aussi en Python et en Ruby.


Ce n'est pas parce que c'est aussi mal fait en Python et Ruby que
c'est bien ;-)

En fait, je ne reproche pas à stat() de faire ce boulot, je reproche à
Perl de ne pas donner accès à cette information simplement (en partant
du principe de L. Wall qui dit que ce qui est simple est facile à
faire en Perl... or accéder aux permissions est quelque chose de
trivial).

Je viens d'avoir à modifier mon script pour ajouter de nouvelles
permissions et j'ai dû me servir d'un second script pour connaître la
tête des permissions « à la stat » pour les intégrer dans le
premier... Je n'ose imaginer la chose quand je relirai cela dans
quelques années ;-)

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       


Avatar
Eric Jacoboni
Patrice Karatchentzeff writes:

Je viens d'avoir à modifier mon script pour ajouter de nouvelles
permissions et j'ai dû me servir d'un second script pour connaître la
tête des permissions « à la stat » pour les intégrer dans le
premier... Je n'ose imaginer la chose quand je relirai cela dans
quelques années ;-)


Voyons... Ne me dis pas que tu n'as pas écrit une fonction au nom
évocateur, richement commentée, prenant en paramètre la sortie de
stat() et renvoyant la partie qui t'intéresse ?

--
Éric Jacoboni, né il y a 1380452327 secondes