Man page - listxattr(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

listxattr

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
Exemple
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
BOGUES
EXEMPLES
Sortie de l’exemple
Source du programme (listxattr.c)
VOIR AUSSI
TRADUCTION

NOM

listxattr, llistxattr, flistxattr - Lister les noms des attributs étendus

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/xattr.h>

ssize_t listxattr (const char * chemin , char *_Nullable liste , size_t taille );
ssize_t llistxattr (const char *
chemin , char *_Nullable liste , size_t taille );
ssize_t flistxattr (int
descripteur , char *_Nullable liste , size_t taille );

DESCRIPTION

Les attributs Ă©tendus sont des paires nom : valeur associĂ©es aux inƓuds (fichiers, rĂ©pertoires, liens symboliques, etc.). Ce sont des extensions des attributs normaux qui sont associĂ©s avec tous les inƓuds du systĂšme (les informations renvoyĂ©es par stat (2). Une description complĂšte des concepts d’attributs Ă©tendus est disponible dans xattr (7).

listxattr () rĂ©cupĂšre la liste des attributs Ă©tendus associĂ©s avec le chemin indiquĂ© du systĂšme de fichier. La liste rĂ©cupĂ©rĂ©e est placĂ©e dans liste , un tampon allouĂ© par l’appelant, dont la taille (en octets) est indiquĂ©e dans l’argument taille . La liste est l’ensemble des noms (terminĂ©s par NULL), l’un aprĂšs l’autre. Les noms des attributs Ă©tendus auxquels le processus appelant n’a pas accĂšs peuvent ĂȘtre omis dans la liste. La longueur de la liste de noms d’attributs est renvoyĂ©e.

llistxattr () est identique Ă  listxattr (), sauf dans le cas d’un lien symbolique, oĂč il renvoie la liste des noms des attributs associĂ©s au lien lui-mĂȘme et non au fichier auquel il se rĂ©fĂšre.

flistxattr () est identique à listxattr (), sauf que le fichier ouvert associé au descripteur (fourni par open (2)) est interrogé à la place du chemin .

Le nom d’un attribut Ă©tendu est une simple chaĂźne terminĂ©e par un octet NULL. Le nom inclut un prĂ©fixe d’espace de noms — il peut y avoir plusieurs espaces de noms disjoints associĂ©s avec un inƓud particulier.

Si taille est indiquĂ© comme Ă©tant de zĂ©ro, ces appels renvoient la taille actuelle de la liste des noms d’attributs Ă©tendus (et ils laissent liste inchangĂ©e). Cela peut ĂȘtre utilisĂ© pour dĂ©terminer la taille du tampon Ă  fournir dans un appel consĂ©cutif (mais il faut tenir compte qu’il est possible que l’ensemble d’attributs Ă©tendus change entre deux appels et qu’il est donc nĂ©cessaire de vĂ©rifier le code de retour de nouveau lors du deuxiĂšme appel).

Exemple

La liste des noms est renvoyée sous forme de table de chaßnes de caractÚres terminées par un octet NULL, sans ordre particulier, les noms des attributs étant séparés par des octets NULL ('\0')), comme ceci :

user.name1\0system.name1\0user.name2\0

Les systĂšmes de fichiers qui implĂ©mentent les ACL (contrĂŽles d’accĂšs) POSIX en utilisant les attributs Ă©tendus peuvent renvoyer une liste comme celle-ci :

system.posix_acl_access\0system.posix_acl_default\0

VALEUR RENVOYÉE

S’ils rĂ©ussissent, ces appels renvoient un nombre non nĂ©gatif correspondant Ă  la taille de la liste de noms d’attributs. En cas d’échec, ils renvoient -1 et errno est dĂ©fini pour indiquer l’erreur.

ERREURS

E2BIG

La taille de la liste de noms d’attributs Ă©tendus est supĂ©rieure Ă  celle maximale autorisĂ©e ; la liste ne peut pas ĂȘtre rĂ©cupĂ©rĂ©e. Cela peut arriver sur des systĂšmes de fichiers qui gĂšrent un nombre illimitĂ© d’attributs Ă©tendus par fichier, tels que XFS par exemple. Voir BOGUES.

ENOTSUP

Les attributs étendus ne sont pas pris en charge par le systÚme de fichiers ou sont désactivés.

ERANGE

La taille du tampon de liste est trop petite pour contenir le résultat.

De plus, les erreurs documentées dans stat (2) peuvent aussi survenir.

STANDARDS

Linux.

HISTORIQUE

Linux 2.4, glibc 2.3.

BOGUES

Comme indiquĂ© dans xattr (7), le VFS impose une limite de 64 Ko comme taille de liste de noms d’attributs Ă©tendus renvoyĂ©e par listxattr (). Si la taille totale des noms d’attributs rattachĂ©s Ă  un fichier dĂ©passe cette limite, il n’est plus possible de rĂ©cupĂ©rer la liste des noms d’attributs.

EXEMPLES

Le programme suivant montre l’utilisation de listxattr () et de getxattr (2). Pour le fichier dont le chemin est fourni en paramĂštre de la ligne de commande, il liste tous les attributs de fichier Ă©tendus et leur valeur.

Pour garder un code simple, le programme suppose que les clĂ©s et les valeurs des attributs sont constantes pendant l’exĂ©cution du programme. Un programme rĂ©el devrait prĂ©voir et gĂ©rer des changements pendant son exĂ©cution. Par exemple, le nombre d’octets requis pour les clĂ©s d’attributs peut augmenter entre les deux appels Ă  listxattr (). Une application pourrait gĂ©rer cette Ă©ventualitĂ© en utilisant une boucle qui retente l’appel (peut-ĂȘtre un nombre prĂ©dĂ©terminĂ© de fois) avec un tampon plus gros Ă  chaque fois qu’il Ă©choue avec l’erreur ERANGE . Les appels getxattr (2) pourraient ĂȘtre gĂ©rĂ©s de la mĂȘme maniĂšre.

La sortie suivante a Ă©tĂ© enregistrĂ©e lors de la premiĂšre crĂ©ation du fichier, oĂč certains attributs Ă©tendus ont Ă©tĂ© positionnĂ©s, puis les attributs sont listĂ©s avec cet exemple de programme.

Sortie de l’exemple

$ touch /tmp/foo
$ setfattr -n user.fred -v chocolate /tmp/foo
$ setfattr -n user.frieda -v bar /tmp/foo
$ setfattr -n user.empty /tmp/foo
$ ./listxattr /tmp/foo
user.fred: chocolate
user.frieda: bar
user.empty: <no value>

Source du programme (listxattr.c)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/xattr.h>
int
main(int argc, char *argv[])
{
char *buf, *key, *val;
ssize_t buflen, keylen, vallen;
if (argc != 2) {
fprintf(stderr, "Usage : %s path\n", argv[0]);
exit(EXIT_FAILURE);
}
/*
* Déterminer la taille du tampon nécessaire.
*/
buflen = listxattr(argv[1], NULL, 0);
if (buflen == -1) {
perror("listxattr");
exit(EXIT_FAILURE);
}
if (buflen == 0) {
printf("%s n’a pas d’attributs.\n", argv[1]);
exit(EXIT_SUCCESS);
}
/*
* Allouer le tampon.
*/
buf = malloc(buflen);
if (buf == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
/*
* Copier la liste des clĂ©s d’attributs dans le tampon.
*/
buflen = listxattr(argv[1], buf, buflen);
if (buflen == -1) {
perror("listxattr");
exit(EXIT_FAILURE);
}
/*
* Boucle dans la liste de chaßnes finies par zéro avec les clés
* d’attribut. Utiliser le reste de la taille du tampon pour
* déterminer la fin de la liste.
*/
key = buf;
while (buflen > 0) {
/*
* Afficher la clĂ© d’attribut.
*/
printf("%s: ", key);
/*
* Déterminer la longueur de la valeur.
*/
vallen = getxattr(argv[1], key, NULL, 0);
if (vallen == -1)
perror("getxattr");
if (vallen > 0) {
/*
* Allouer des tampons de valeur.
* Un octet supplémentaire est nécessaire pour compléter 0x00.
*/
val = malloc(vallen + 1);
if (val == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
/*
* Copier la valeur dans le tampon.
*/
vallen = getxattr(argv[1], key, val, vallen);
if (vallen == -1) {
perror("getxattr");
} else {
/*
* Afficher la valeur de l’attribut.
*/
val[vallen] = 0;
printf("%s", val);
}
free(val);
} else if (vallen == 0) {
printf("<pas de valeur>");
}
printf("\n");
/*
* Faire suivre Ă  la prochaine clĂ© d’attribut.
*/
keylen = strlen(key) + 1;
buflen -= keylen;
key += keylen;
}
free(buf);
exit(EXIT_SUCCESS);
}

VOIR AUSSI

getfattr (1), setfattr (1), getxattr (2), open (2), removexattr (2), setxattr (2), stat (2), symlink (7), xattr (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .