> Tech > Comprendre les indicateurs binaires

Comprendre les indicateurs binaires

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Les paramètres OpenFlags et Mode de l'API open() sont ce que j'appelle des paramètres bit-flags. Cela signifie que l'important à  propos de chaque paramètre n'est pas la valeur numérique que vous lui attribuez mais les bits physiques réels qu'il occupe en mémoire.
Chaque bit de mémoire que le paramètre utilise

Comprendre les indicateurs binaires

représente une option
qui peut être passée à  l’API. Comme un
champ entier RPG contient 32 bits, on
peut représenter jusqu’à  32 options
différentes dans un seul paramètre.
Dans les figures 3 et 4, j’ai numéroté
les bits des paramètres, de droite à 
gauche, en commençant par zéro. Si le
bit 29 du paramètre OpenFlags contient
la valeur 1, c’est que l’option de
support de grand fichier est demandée.
Si le bit est 0, le support de grand
fichier n’est pas demandé. De même,
si le bit 1 et le bit 29 sont activés, c’est
que les deux options – support de
grand fichier et écriture seulement –
sont demandées.
Supposons que vous vouliez ouvrir un fichier pour l’écriture.
Si le fichier n’existe pas, il faut le créer. S’il existe, il faut
supprimer les éventuelles données qu’il contient (c’est-à dire,
tronquer le fichier). Dans les deux cas, vous voulez ouvrir
le fichier en écriture seulement.
Pour cela, vous devez activer
les bits 1, 3 et 6. Le nombre
binaire 1001010 contient ces bits
activés. Si vous convertissez ce
nombre en décimales, vous obtenez
74 : c’est la valeur que vous
voulez passer pour le paramètre
OpenFlags.En fait, si vous le vouliez,
vous pourriez spécifier l’API
open() de la figure 1 de la manière
suivante et elle fonctionnerait
tout aussi bien :

fd = open(‘/tmp/hello.txt’: 74: 438);

Il n’est pas facile de manipuler ces nombres en binaire et
le code est difficile à  lire. Pour faciliter les choses, j’ai créé des
constantes nommées, une pour chaque
bit flag et je les ai incluses dans le membre
source IFSIO_H pour que vous
puissiez les télécharger.
Les constantes nommées O_CREAT,
O_TRUNC et O_ WRONLY spécifient
chacune un bit du paramètre Open-
Flags. O_WRONLY spécifie le bit 1,
O_CREAT spécifie le bit 3 et O_TRUNC
spécifie le bit 6. En additionnant ces
nombres, on active les trois bits (on) et
on spécifie ainsi les options create,
truncate et write-only pour l’API.
Le paramètre Mode fonctionne de
la même manière. Chaque fichier présent
dans l’IFS a un ID utilisateur et un
groupe qui, tous deux, le possèdent.
Chaque bit du paramètre Mode spécifie
un type de permission que vous pouvez
accorder ou refuser. Les bits 6-8 indiquent
si vous voulez, ou non, accorder
au propriétaire du fichier la permission
de lire, d’écrire ou d’exécuter celui-ci,
respectivement. Les bits 3-5 spécifient
les mêmes options pour le groupe et
les bits 0-2 spécifient ces options pour
qui n’est ni propriétaire du fichier, ni
membre du groupe.
Ainsi, si je crée un fichier appartenant
à  l’utilisateur SCOTT et au groupe
PGMRS, je pourrais fort bien accorder
l’accès en lecture et écriture à  la fois à 
SCORR et aux utilisateurs du groupe PGMRS, et à  personne d’autre. Cela
aboutirait à  l’agencement binaire suivant
dans le paramètre Mode : 110110
000. Si on convertit ce nombre binaire
en décimal, on obtient le nombre 432,
que l’on passera dans le paramètre
Mode.
Comme pour le paramètre Open-
Flags, il y a des constantes nommées
qui spécifient chaque bit dans le paramètre
Mode. S_IRUSR, S_IWUSR et
S_IXUSR spécifient les permissions
read, write et execute pour le propriétaire
du fichier. S_IRGRP, S_IWGRP et
S_IXGRP spécifient les mêmes permissions
pour le groupe et S_IROTH,
S_IWOTH et S_IXOTH spécifient ces
permissions pour tous les autres. Au
lieu d’utiliser le nombre 432, je peux
additionner ces constantes pour obtenir
un code plus facile à  lire :

S_IRUSR+S_IWUSR+S_IRGRP+S_IWGRP

Il n’est pas facile de suivre la spécification
de tous les flags de permission.
C’est pourquoi j’ai défini quelques raccourcis
dans le membre IFSIO_H pour
simplifier cette opération. M_RDONLY
active (on) les bits read pour l’utilisateur,
le groupe et tous les autres.
M_RDWR spécifie des permissions
read et write pour tout le monde, et
M_RWX spécifie des permissions read,
write et execute pour tout le monde.
Dans la figure 1, je demande à  la
constante M_RDWR de dire à  l’API que
je veux que le propriétaire, le groupe
et tout les autres aient la permission
read et write sur le fichier stream
hello.txt.

Téléchargez cette ressource

Guide inmac wstore pour l’équipement IT de l’entreprise

Guide inmac wstore pour l’équipement IT de l’entreprise

Découvrez toutes nos actualités à travers des interviews, avis, conseils d'experts, témoignages clients, ainsi que les dernières tendances et solutions IT autour de nos 4 univers produits : Poste de travail, Affichage et Collaboration, Impression et Infrastructure.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010