.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2014 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH open_by_handle_at 2 "15 juin 2024" "Pages du manuel de Linux 6.9.1" .SH NOM name_to_handle_at, open_by_handle_at \- Récupérer le gestionnaire d'un chemin et ouvrir le fichier au moyen d'un gestionnaire .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#define _GNU_SOURCE\fP /* Consultez feature_test_macros(7) */ \fB#include \fP .P \fBint name_to_handle_at(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB,\fP \fB struct file_handle *\fP\fIhandle\fP\fB,\fP \fB int *\fP\fImount_id\fP\fB, int \fP\fIflags\fP\fB);\fP \fBint open_by_handle_at(int \fP\fImount_fd\fP\fB, struct file_handle *\fP\fIhandle\fP\fB,\fP \fB int \fP\fIflags\fP\fB);\fP .fi .SH DESCRIPTION .\" .\" Les appels système \fBname_to_handle_at\fP() et \fBopen_by_handle_at\fP() scindent la fonction de \fBopenat\fP(2) en deux parties : \fBname_to_handle_at\fP() renvoie un gestionnaire opaque qui correspond à un fichier indiqué ; \fBopen_by_handle_at\fP() ouvre le fichier correspondant à un gestionnaire renvoyé par un appel antérieur à \fBname_to_handle_at\fP() et renvoie le descripteur d'un fichier ouvert. .SS name_to_handle_at() L'appel système \fBname_to_handle_at\fP() renvoie un gestionnaire de fichier et un identifiant de montage (« mount ID ») correspondant au fichier désigné par les arguments \fIdirfd\fP et \fIpathname\fP. Le gestionnaire de fichier est renvoyé au moyen de l'argument \fIhandle\fP. Cet argument est un pointeur vers une structure qui présente la forme suivante : .P .in +4n .EX struct file_handle { unsigned int handle_bytes; /* taille de f_handle [in, out] */ int handle_type; /* type du gestionnaire [out] */ unsigned char f_handle[0]; /* identifiant du fichier (taille définie par l’appelant) [out] */ }; .EE .in .P L'appelant à l'origine de l'appel doit s'assurer que la structure est créée avec une taille suffisante pour contenir le gestionnaire renvoyé dans \fIf_handle\fP. Avant l'appel, le champ \fIhandle_bytes\fP devrait être initialisé de sorte que l'espace alloué puisse recevoir \fIf_handle\fP. (La constante \fBMAX_HANDLE_SZ\fP, définie dans \fI\fP, précise la taille maximale autorisée pour un gestionnaire de fichier. La limite supérieure n'est pas garantie car de futurs systèmes de fichiers pourraient avoir besoin de davantage d'espace). Lorsque l'appel réussit, le champ \fIhandle_bytes\fP est mis à jour afin de contenir le nombre d'octets effectivement écrits dans \fIf_handle\fP. .P L'appelant peut prendre connaissance de l'espace nécessaire à la structure \fIfile_handle\fP en effectuant un appel dans lequel \fIhandle\->handle_bytes\fP vaut zéro ; dans ce cas, l'appel échoue en renvoyant l'erreur \fBEOVERFLOW\fP et \fIhandle\->handle_bytes\fP prend pour valeur la taille requise ; l'appelant peut alors utiliser cette information pour allouer une structure ayant la taille convenable (consultez EXEMPLES ci\-dessous). Il faut faire attention ici car \fBEOVERFLOW\fP peut indiquer qu'aucun gestionnaire de fichier n'est disponible pour ce nom particulier dans un système de fichiers qui prend normalement en charge la recherche de gestionnaire de fichiers. Ce cas peut se détecter quand l'erreur \fBEOVERFLOW\fP est renvoyée sans que \fIhandle_bytes\fP ne soit augmenté. .P Other than the use of the \fIhandle_bytes\fP field, the caller should treat the \fIfile_handle\fP structure as an opaque data type: the \fIhandle_type\fP and \fIf_handle\fP fields can be used in a subsequent call to \fBopen_by_handle_at\fP(). The caller can also use the opaque \fIfile_handle\fP to compare the identity of filesystem objects that were queried at different times and possibly at different paths. The \fBfanotify\fP(7) subsystem can report events with an information record containing a \fIfile_handle\fP to identify the filesystem object. .P L'argument \fIflags\fP est un masque de bits construit par \fIOU\fP binaire entre zéro ou plus de \fBAT_EMPTY_PATH\fP et \fBAT_SYMLINK_FOLLOW\fP, décrits plus bas. .P .\" commit 96b2b072ee62be8ae68c8ecf14854c4d0505a8f8 When \fIflags\fP contain the \fBAT_HANDLE_FID\fP (since Linux 6.5) flag, the caller indicates that the returned \fIfile_handle\fP is needed to identify the filesystem object, and not for opening the file later, so it should be expected that a subsequent call to \fBopen_by_handle_at\fP() with the returned \fIfile_handle\fP may fail. .P Ensemble, les arguments \fIpathname\fP et \fIdirfd\fP désignent le fichier pour lequel on souhaite obtenir un gestionnaire. On distingue quatre cas : .IP \- 3 Si \fIpathname\fP est une chaîne non vide contenant un chemin d'accès absolu, alors un gestionnaire est renvoyé pour le fichier indiqué par ce chemin. Dans ce cas, \fIdirfd\fP est ignoré. .IP \- Si \fIpathname\fP est une chaîne non vide contenant un chemin relatif, et si \fIdirfd\fP a la valeur spéciale \fBAT_FDCWD\fP, alors \fIpathname\fP est interprété par rapport au répertoire courant du processus appelant, et un gestionnaire est renvoyé pour le fichier indiqué par le chemin. .IP \- Si \fIpathname\fP est une chaîne non vide contenant un chemin d'accès relatif et si \fIdirfd\fP est le descripteur de fichier d'un répertoire, alors \fIpathname\fP est interprété par rapport au répertoire désigné par \fIdirfd\fP, et un gestionnaire est renvoyé pour le fichier indiqué par le chemin. (Consultez \fBopenat\fP(3) si vous souhaitez comprendre à quoi servent les « descripteurs de fichier de répertoires »). .IP \- Si \fIpathname\fP est une chaîne vide, et si \fIflags\fP précise la valeur de \fBAT_EMPTY_PATH\fP, alors \fIdirfd\fP peut être un descripteur de fichiers ouvert faisant référence à n'importe quel type de fichier ou à \fBAT_FDCWD\fP (répertoire de travail courant), et un gestionnaire est renvoyé pour le fichier auquel il fait référence. .P L'argument \fImount_id\fP renvoie un identifiant pour le point de montage du système de fichiers correspondant à \fIpathname\fP. Cet identifiant correspond au premier champ des entrées de \fI/proc/self/mountinfo\fP. L'ouverture du chemin indiqué dans le cinquième champ délivre un descripteur de fichier pour le point de montage ; ce descripteur de fichier peut être utilisé par la suite lors d'un appel à \fBopen_by_handle_at\fP(). \fImount_id\fP est renvoyé tant en cas de succès qu'en cas d'erreur \fBEOVERFLOW\fP de l'appel. .P Par défaut, \fBname_to_handle_at\fP() ne déréférence pas \fIpathname\fP s'il s'agit d'un lien symbolique, et donc renvoie un gestionnaire pour le lien lui\-même. Si \fBAT_SYMLINK_FOLLOW\fP est précisé dans \fIflags\fP, \fIpathname\fP est déréférencé s'il s'agit d'un lien symbolique (de sorte que l'appel renvoie un indicateur pour le fichier vers lequel pointe le lien symbolique). .P .\" commit 20fa19027286983ab2734b5910c4a687436e0c31 \fBname_to_handle_at\fP() ne récupère pas un montage quand le composant final du chemin est un point de montage automatique. Quand un système de fichiers gère à la fois les gestionnaires de fichier et les points de montage automatique, un appel \fBname_to_handle_at\fP() sur un point de montage automatique renverra une erreur \fBEOVERFLOW\fP sans augmenter \fIhandle_bytes\fP. Cela peut arriver depuis Linux 4.13 avec NFS lors d'un accès à un répertoire sur un système de fichiers séparé du serveur. Dans ce cas, le montage automatique peut être provoqué en ajoutant un « / » à la fin du chemin. .SS open_by_handle_at() L'appel système \fBopen_by_handle_at\fP() ouvre le fichier auquel \fIhandle\fP fait référence, via un indicateur de fichier renvoyé lors d'un précédent appel à \fBname_to_handle_at\fP(). .P L'argument \fImount_fd\fP est un descripteur de fichier pour n'importe quel type d'objet (fichier, répertoire, etc.) du système de fichiers monté qui permet d'interpréter l'indicateur de fichier (\fIhandle\fP). La valeur spéciale \fBAT_FDCWD\fP peut être précisée, et indique le répertoire courant du processus appelant. .P L'argument \fIflags\fP a la même fonction que pour \fBopen\fP(2). Si l'indicateur \fIhandle\fP fait référence à un lien symbolique, le processus appelant doit préciser l'attribut \fBO_PATH\fP et le lien symbolique n'est pas déréférencé. L'attribut \fBO_NOFOLLOW\fP est ignoré. .P L'appelant doit avoir la capacité \fBCAP_DAC_READ_SEARCH\fP pour utiliser \fBopen_by_handle_at\fP(). .SH "VALEUR RENVOYÉE" Lorsqu'il réussit, l'appel \fBname_to_handle_at\fP() renvoie \fB0\fP et \fBopen_by_handle_at\fP() renvoie un descripteur de fichier (un entier non négatif). .P En cas d'échec, les deux appels renvoient \fB\-1\fP et définissent \fIerrno\fP pour indiquer l'erreur. .SH ERREURS Les appels \fBname_to_handle_at\fP() et \fBopen_by_handle_at\fP() peuvent échouer pour les mêmes raisons que \fBopenat\fP(2). En outre, ils peuvent également échouer pour les motifs décrits plus bas. .P \fBname_to_handle_at\fP() peut échouer avec les erreurs suivantes : .TP \fBEFAULT\fP \fIpathname\fP, \fImount_id\fP ou \fIhandle\fP pointe en dehors de l'espace d'adressage accessible. .TP \fBEINVAL\fP \fIflags\fP comprend un bit incorrect. .TP \fBEINVAL\fP \fIhandle\->handle_bytes\fP est supérieur à \fBMAX_HANDLE_SZ\fP. .TP \fBENOENT\fP \fIpathname\fP est une chaîne vide et \fBAT_EMPTY_PATH\fP n’était pas indiqué dans \fIflags\fP. .TP \fBENOTDIR\fP Le descripteur de fichiers fourni dans \fIdirfd\fP ne fait pas référence à un répertoire, et il ne s'agit pas du cas où \fIflags\fP comprend \fBAT_EMPTY_PATH\fP et \fIpathname\fP est une chaîne vide. .TP \fBEOPNOTSUPP\fP Le système de fichiers ne permet pas la transcription du chemin de fichier en indicateur de fichier. .TP \fBEOVERFLOW\fP .\" .\" La valeur \fIhandle\->handle_bytes\fP transmise dans l'appel est trop faible. Lorsque cette erreur se produit, \fIhandle\->handle_bytes\fP est modifié afin d'indiquer la taille requise pour cet indicateur. .P \fBopen_by_handle_at\fP() peut échouer avec les erreurs suivantes : .TP \fBEBADF\fP \fImount_fd\fP n'est pas un descripteur de fichier ouvert. .TP \fBEBADF\fP \fIpathname\fP est relatif mais \fIdirfd\fP n'est ni \fBAT_FDWCD\fP ni un descripteur de fichier valable. .TP \fBEFAULT\fP \fIhandle\fP pointe en dehors de l'espace d'adressage accessible. .TP \fBEINVAL\fP \fIhandle\->handle_bytes\fP est supérieur à \fBMAX_HANDLE_SZ\fP ou égal à zéro. .TP \fBELOOP\fP \fIhandle\fP correspond à un lien symbolique et \fBO_PATH\fP n’était pas indiqué dans \fIflags\fP. .TP \fBEPERM\fP L'appelant n'a pas la capacité \fBCAP_DAC_READ_SEARCH\fP. .TP \fBESTALE\fP The specified \fIhandle\fP is not valid for opening a file. This error will occur if, for example, the file has been deleted. This error can also occur if the \fIhandle\fP was acquired using the \fBAT_HANDLE_FID\fP flag and the filesystem does not support \fBopen_by_handle_at\fP(). .SH VERSIONS FreeBSD has a broadly similar pair of system calls in the form of \fBgetfh\fP() and \fBfhopen\fP(). .SH STANDARDS Linux. .SH HISTORIQUE Linux 2.6.39, glibc 2.14. .SH NOTES Un indicateur de fichier peut être créé dans un processus au moyen de \fBname_to_handle_at\fP() et utilisé plus tard dans un autre processus qui appelle \fBopen_by_handle_at\fP(). .P Certains systèmes de fichiers ne permettent pas la transcription des chemins en indicateurs de fichier, par exemple, \fI/proc\fP, \fI/sys\fP, ainsi que divers systèmes de fichiers en réseaux. Certains systèmes de fichiers permettent la transcription des chemins en indicateurs de fichier, mais ne prennent pas en charge l'utilisation de ces indicateurs de fichier dans \fBopen_by_handle_at\fP(). .P Un indicateur de fichier peut devenir non valable (« stale ») si un fichier est supprimé, ou pour une raison propre au système de fichiers. Les indicateurs non autorisés sont signalés par une erreur \fBESTALE\fP provenant de \fBopen_by_handle_at\fP(). .P .\" https://lwn.net/Articles/375888/ .\" "Open by handle" - Jonathan Corbet, 2010-02-23 Ces appels systèmes sont conçus pour être utilisés par des serveurs de fichiers en espace utilisateur. Par exemple, un serveur NFS en espace utilisateur produit un indicateur de fichier et le transmet au client NFS. Plus tard, lorsque le client souhaite accéder au fichier, il peut renvoyer l'indicateur au serveur. Ce type de fonctionnalité permet à un serveur de fichiers en espace utilisateur d'opérer sans état vis à vis des fichiers qu'il délivre. .P .\" commit bcda76524cd1fa32af748536f27f674a13e56700 Si \fIpathname\fP fait référence à un lien symbolique et si \fIflags\fP ne précise pas \fBAT_SYMLINK_FOLLOW\fP, alors \fBname_to_handle_at\fP() renvoie un indicateur pour le lien (plutôt que pour le fichier vers lequel le lien pointe). Le processus recevant l'indicateur peut effectuer plus tard une opération sur ce lien symbolique, en convertissant l'indicateur en descripteur de fichier au moyen de \fBopen_by_handle_at\fP() utilisé avec l'argument \fBO_PATH\fP, et en passant le descripteur de fichier en argument \fIdirfd\fP d’appels système (tels que \fBreadlinkat\fP(2) et \fBfchownat\fP(2)). .SS "Obtenir un identifiant persistant de système de fichier" Les identifiants de montage dans \fI/proc/self/mountinfo\fP peuvent être réutilisés même lorsque les systèmes de fichiers sont démontés et remontés. Ainsi, l'identifiant de montage renvoyé par \fBname_to_handle_at\fP() (dans \fI*mount_id\fP) ne doit pas être considéré comme un identifiant persistant pour le système de fichiers considéré. Néanmoins, il est possible pour une application d'utiliser l'information fournie dans \fImountinfo\fP et correspondant à l'identifiant de montage pour en déduire un identifiant persistant. .P .\" e.g., http://stackoverflow.com/questions/6748429/using-libblkid-to-find-uuid-of-a-partition Par exemple, on peut utiliser le nom de périphérique présent dans le cinquième champ de \fImountinfo\fP pour retrouver l'UUID du périphérique correspondant au moyen des liens symboliques dans \fI/dev/disks/by\-uuid\fP. (Un moyen plus simple d'obtenir cet UUID consiste à utiliser la bibliothèque \fBlibblkid\fP(3)). Cette façon de procéder peut être inversée, en utilisant l'UUID pour retrouver le nom du périphérique, et ainsi obtenir le point de montage correspondant, et enfin construire l'argument de \fImount_fd\fP utile à \fBopen_by_handle_at\fP(). .SH EXEMPLES Les deux programmes suivants illustrent l'utilisation de \fBname_to_handle_at\fP() et de \fBopen_by_handle_at\fP(). Le premier programme (\fIt_name_to_handle_at.c\fP) utilise \fBname_to_handle_at\fP() pour récupérer l'indicateur de fichier et l'identifiant de montage du fichier indiqué dans les arguments en ligne de commande ; l'indicateur et l'identifiant de montage sont écrits sur la sortie standard. .P Le second programme (\fIt_open_by_handle_at.c\fP) lit un identifiant de montage et un indicateur de fichier depuis l'entrée standard. Le programme utilise ensuite \fBopen_by_handle_at\fP() pour lire le fichier au moyen de cet indicateur. Si un argument optionnel est fourni dans la ligne de commande, alors l'argument \fImount_fd\fP de \fBopen_by_handle_at\fP() est obtenu en ouvrant le répertoire précisé en argument. Sinon, \fImount_fd\fP est obtenu en parcourant \fI/proc/self/mountinfo\fP à la recherche d'un identifiant de montage correspondant à celui fourni via l'entrée standard, et le répertoire monté qui a été trouvé est ouvert. (Ces programmes ne tiennent pas compte du fait que les identifiants de montage ne sont pas persistants.) .P La session shell suivante montre des exemples d'utilisation de ces deux programmes : .P .in +4n .EX $ \fBecho \[aq]Can you please think about it?\[aq] > cecilia.txt\fP $ \fB./t_name_to_handle_at cecilia.txt > fh\fP $ \fB./t_open_by_handle_at < fh\fP open_by_handle_at: Operation not permitted $ \fBsudo ./t_open_by_handle_at < fh\fP # Nécessite CAP_SYS_ADMIN Read 31 bytes $ \fBrm cecilia.txt\fP .EE .in .P .\" Christoph Hellwig: That's why the file handles contain a generation .\" counter that gets incremented in this case. A ce stade, on supprime et recrée (rapidement) le fichier, de sorte qu'il ait le même contenu et (avec un peu de chance) le même inœud. Cependant, \fBopen_by_handle_at\fP() s'aperçoit que le fichier original auquel l'indicateur fait référence n'existe plus. .P .in +4n .EX $ \fBstat \-\-printf="%i\[rs]n" cecilia.txt\fP # Display inode number 4072121 $ \fBrm cecilia.txt\fP $ \fBecho \[aq]Can you please think about it?\[aq] > cecilia.txt\fP $ \fBstat \-\-printf="%i\[rs]n" cecilia.txt\fP # Check inode number 4072121 $ \fBsudo ./t_open_by_handle_at < fh\fP open_by_handle_at: Stale NFS file handle .EE .in .SS "Source du programme : t_name_to_handle_at.c" .\" SRC BEGIN (t_name_to_handle_at.c) \& .EX #define _GNU_SOURCE #include #include #include #include #include \& int main(int argc, char *argv[]) { int mount_id, fhsize, flags, dirfd; char *pathname; struct file_handle *fhp; \& if (argc != 2) { fprintf(stderr, "Usage: %s pathname\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& pathname = argv[1]; \& /* Allocate file_handle structure. */ \& fhsize = sizeof(*fhp); fhp = malloc(fhsize); if (fhp == NULL) err(EXIT_FAILURE, "malloc"); \& /* Make an initial call to name_to_handle_at() to discover the size required for file handle. */ \& dirfd = AT_FDCWD; /* For name_to_handle_at() calls */ flags = 0; /* For name_to_handle_at() calls */ fhp\->handle_bytes = 0; if (name_to_handle_at(dirfd, pathname, fhp, &mount_id, flags) != \-1 || errno != EOVERFLOW) { fprintf(stderr, "Unexpected result from name_to_handle_at()\[rs]n"); exit(EXIT_FAILURE); } \& /* Reallocate file_handle structure with correct size. */ \& fhsize = sizeof(*fhp) + fhp\->handle_bytes; fhp = realloc(fhp, fhsize); /* Copies fhp\->handle_bytes */ if (fhp == NULL) err(EXIT_FAILURE, "realloc"); \& /* Get file handle from pathname supplied on command line. */ \& if (name_to_handle_at(dirfd, pathname, fhp, &mount_id, flags) == \-1) err(EXIT_FAILURE, "name_to_handle_at"); \& /* Write mount ID, file handle size, and file handle to stdout, for later reuse by t_open_by_handle_at.c. */ \& printf("%d\[rs]n", mount_id); printf("%u %d ", fhp\->handle_bytes, fhp\->handle_type); for (size_t j = 0; j < fhp\->handle_bytes; j++) printf(" %02x", fhp\->f_handle[j]); printf("\[rs]n"); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SS "Source du programme : t_open_by_handle_at.c" .\" SRC BEGIN (t_open_by_handle_at.c) \& .EX #define _GNU_SOURCE #include #include #include #include #include #include #include #include \& /* Scan /proc/self/mountinfo to find the line whose mount ID matches \[aq]mount_id\[aq]. (An easier way to do this is to install and use the \[aq]libmount\[aq] library provided by the \[aq]util\-linux\[aq] project.) Open the corresponding mount path and return the resulting file descriptor. */ \& static int open_mount_path_by_id(int mount_id) { int mi_mount_id, found; char mount_path[PATH_MAX]; char *linep; FILE *fp; size_t lsize; ssize_t nread; \& fp = fopen("/proc/self/mountinfo", "r"); if (fp == NULL) err(EXIT_FAILURE, "fopen"); \& found = 0; linep = NULL; while (!found) { nread = getline(&linep, &lsize, fp); if (nread == \-1) break; \& nread = sscanf(linep, "%d %*d %*s %*s %s", &mi_mount_id, mount_path); if (nread != 2) { fprintf(stderr, "Bad sscanf()\[rs]n"); exit(EXIT_FAILURE); } \& if (mi_mount_id == mount_id) found = 1; } free(linep); \& fclose(fp); \& if (!found) { fprintf(stderr, "Could not find mount point\[rs]n"); exit(EXIT_FAILURE); } \& return open(mount_path, O_RDONLY); } \& int main(int argc, char *argv[]) { int mount_id, fd, mount_fd, handle_bytes; char buf[1000]; #define LINE_SIZE 100 char line1[LINE_SIZE], line2[LINE_SIZE]; char *nextp; ssize_t nread; struct file_handle *fhp; \& if ((argc > 1 && strcmp(argv[1], "\-\-help") == 0) || argc > 2) { fprintf(stderr, "Usage: %s [mount\-path]\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& /* Standard input contains mount ID and file handle information: \& Line 1: Line 2: */ \& if (fgets(line1, sizeof(line1), stdin) == NULL || fgets(line2, sizeof(line2), stdin) == NULL) { fprintf(stderr, "Missing mount_id / file handle\[rs]n"); exit(EXIT_FAILURE); } \& mount_id = atoi(line1); \& handle_bytes = strtoul(line2, &nextp, 0); \& /* Given handle_bytes, we can now allocate file_handle structure. */ \& fhp = malloc(sizeof(*fhp) + handle_bytes); if (fhp == NULL) err(EXIT_FAILURE, "malloc"); \& fhp\->handle_bytes = handle_bytes; \& fhp\->handle_type = strtoul(nextp, &nextp, 0); \& for (size_t j = 0; j < fhp\->handle_bytes; j++) fhp\->f_handle[j] = strtoul(nextp, &nextp, 16); \& /* Obtain file descriptor for mount point, either by opening the pathname specified on the command line, or by scanning /proc/self/mounts to find a mount that matches the \[aq]mount_id\[aq] that we received from stdin. */ \& if (argc > 1) mount_fd = open(argv[1], O_RDONLY); else mount_fd = open_mount_path_by_id(mount_id); \& if (mount_fd == \-1) err(EXIT_FAILURE, "opening mount fd"); \& /* Open file using handle and mount point. */ \& fd = open_by_handle_at(mount_fd, fhp, O_RDONLY); if (fd == \-1) err(EXIT_FAILURE, "open_by_handle_at"); \& /* Try reading a few bytes from the file. */ \& nread = read(fd, buf, sizeof(buf)); if (nread == \-1) err(EXIT_FAILURE, "read"); \& printf("Read %zd bytes\[rs]n", nread); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "VOIR AUSSI" \fBopen\fP(2), \fBlibblkid\fP(3), \fBblkid\fP(8), \fBfindfs\fP(8), \fBmount\fP(8) .P La documentation relative à \fIlibblkid\fP et à \fIlibmount\fP de la dernière publication de \fIutil\-linux\fP à .UR https://www.kernel.org/pub/linux/utils/util\-linux/ .UE .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Frédéric Hantrais et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .