Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       setns - Réassocier un thread avec un espace de noms

SYNOPSIS

       #define _GNU_SOURCE             /* Consultez feature_test_macros(7) */
       #include <sched.h>

       int setns(int fd, int nstype);

DESCRIPTION

       Étant  donné  un  descripteur  de  fichiers  faisant  référence à un espace de noms, réassocier le thread
       appelant à cet espace de noms.

       L'argument fd est un descripteur de fichier faisant référence à un des espaces de noms présents  sous  la
       forme  d'entrées  dans  un  répertoire  /proc/[pid]/ns/.  Consultez  proc(5) pour plus d'informations sur
       /proc/[pid]/ns. Le thread appelant sera réassocié avec l'espace de noms correspondant, si les contraintes
       imposées par l'argument nstype sont satisfaites.

       L'argument nstype indique les types d'espaces de noms auxquels le thread appelant  peut  être  réassocié.
       Cet argument peut prendre une des valeurs suivantes :

       0      fd peut faire référence à n'importe quel type d'espace de noms.

       CLONE_NEWIPC
              fd doit faire référence à un espace de noms IPC.

       CLONE_NEWNET
              fd doit faire référence à un espace de noms réseau.

       CLONE_NEWUTS
              fd doit faire référence à un espace de noms UTS.

       Définir  la  valeur  de  nstype  à zéro est suffisant si le thread appelant connaît (ou n'a pas besoin de
       connaître) le type d'espace de noms auquel fd fait référence. Définir nstype à une valeur non  nulle  est
       utile  si  l'appelant  ne  connaît pas le type de l'espace de noms référencé par fd et veut s'assurer que
       l'espace de noms est du type souhaité. (L'appelant pourrait ne pas connaître le type de l'espace de  noms
       auquel  fd  fait  référence si le descripteur de fichiers a été ouvert par un autre processus et qu'il a,
       par exemple, été passé à l'appelant par une socket UNIX.)

VALEUR RENVOYÉE

       S'il réussit, setns() renvoie zéro, sinon il renvoie -1 et remplit errno avec le code d'erreur.

ERREURS

       EBADF  fd n'est pas un descripteur de fichier valable.

       EINVAL fd fait référence à un espace de noms dont le type ne correspond pas à celui indiqué dans  nstype,
              ou  bien  un  problème  s'est  produit  lors  de  la réassociation du thread avec l'espace de noms
              indiqué.

       ENOMEM Impossible d'allouer suffisamment de mémoire pour changer l'espace de noms indiqué.

       EPERM  Le processus appelant n'avait pas les privilèges (CAP_SYS_ADMIN) pour effectuer cette opération.

VERSIONS

       L'appel système setns() est apparu dans Linux 3.0 ; son support a été ajouté dans la version 2.14  de  la
       glibc.

CONFORMITÉ

       L'appel système setns() est spécifique à Linux.

NOTES

       Certains des attributs qui peuvent être partagés avec un nouveau thread créé avec clone(2) ne peuvent pas
       être modifiés en utilisant setns().

EXEMPLE

       Le  programme  ci-dessous  attend  au  moins  deux  arguments.  Le premier précise le chemin d'un fichier
       d'espace de noms dans un  répertoire  /proc/[pid]/ns/  qui  doit  exister  préalablement.  Les  arguments
       suivants  précisent  une  commande  et  ses  arguments.  Le  programme ouvre le fichier d'espace de noms,
       s'associe à l'espace de noms en utilisant setns(), et exécute la commande indiquée  dans  cet  espace  de
       noms.

       La  session  d'invite  de commandes suivante présente l'utilisation du programme (compilé dans un binaire
       appelé ns_exec) en lien avec le programme CLONE_NEWUTS donné en example dans la page de  manuel  clone(2)
       (compilé dans un binaire appelé newuts).

       Nous  commençons  par  exécuter  le  programme donné à titre d'exemple dans clone(2) en tâche de fond. Ce
       programme crée un processus fils dans un espace de noms UTS distinct. Le processus  fils  change  le  nom
       d'hôtes  dans  son espace de noms, puis les deux processus affichent leur noms d'hôtes dans leurs espaces
       de noms UTS respectifs, de façon à bien montrer leur différence.

           $ su       # Privilèges nécessaires aux opérations sur l'espace de noms
           Mot de passe :
           # ./newuts bizarro &
           [1] 3549
           clone() à renvoyé 3550
           uts.nodename dans le fils : bizarro
           uts.nodename dans le père : antero
           # uname -n # Vérifier le nom d'hôte dans l'invite de commande
           antero

       Nous appelons alors le programme présenté ci-dessous afin de lancer une invite de  commande.  Dans  cette
       invite,  on  vérifie  que  le nom d'hôte est bien celui défini par le processus fils créé dans le premier
       programme :

           # ./ns_exec /proc/3550/ns/uts /bin/bash
           # uname -n             # Exécuté dans l'invite lancée par ns_exec
           bizarro

   Code du programme
       #define _GNU_SOURCE
       #include <fcntl.h>
       #include <sched.h>
       #include <unistd.h>
       #include <stdlib.h>
       #include <stdio.h>

       #define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \
                               } while (0)

       int
       main(int argc, char *argv[])
       {
           int fd;

           if (argc < 3) {
               fprintf(stderr, "%s /proc/PID/ns/FILE cmd args...\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           fd = open(argv[1], O_RDONLY);   /* Récupérer le descripteur pour
                                              l'espace de noms */
           if (fd == -1)
               errExit("open");

           if (setns(fd, 0) == -1)         /* S'associer à l'espace de noms */
               errExit("setns");

           execvp(argv[2], &argv[2]);      /* Exécuter la commande dans
                                              l'espace de noms */
           errExit("execvp");
       }

VOIR AUSSI

       clone(2), fork(2), vfork(2), proc(5), unix(7)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions    pour    signaler    des    anomalies    peuvent     être     trouvées     à     l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».

Linux                                           1er janvier 2013                                        SETNS(2)