Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       getutent,  getutid,  getutline,  pututline,  setutent,  endutent,  utmpname  - Accéder aux
       enregistrements utmp

SYNOPSIS

       #include <utmp.h>

       struct utmp *getutent(void);
       struct utmp *getutid(const struct utmp *ut);
       struct utmp *getutline(const struct utmp *ut);

       struct utmp *pututline(const struct utmp *ut);

       void setutent(void);
       void endutent(void);

       int utmpname(const char *file);

DESCRIPTION

       Les nouvelles applications  devraient  utiliser  les  versions  « utmpx »  spécifiées  par
       POSIX.1 de ces fonctions ; voir CONFORMITÉ.

       utmpname()  indique le nom du fichier au format utmp à utiliser avec les autres fonctions.
       Si utmpname() n'est pas appelé avant les autres fonctions, elles  utiliseront  le  fichier
       _PATH_UTMP, défini dans <paths.h>.

       setutent()  ramène  le  pointeur  au  début du fichier utmp. Il est généralement conseillé
       d'appeler cette fonction au début du programme.

       endutent() ferme le fichier utmp. Ceci devrait être appelé une fois  que  le  programme  a
       terminé ses accès au fichier.

       getutent() lit une ligne du fichier utmp, à la position courante. Elle renvoie un pointeur
       sur une structure contenant les  divers  champs  de  la  ligne.  La  définition  de  cette
       structure peut être consultée dans utmp(5).

       getutid()  effectue  une recherche dans le fichier utmp, à partir de la position courante,
       en se basant sur ut. Si  ut->ut_type  vaut  RUN_LVL,  BOOT_TIME,  NEW_TIME,  ou  OLD_TIME,
       getutid()  recherchera  le  premier  enregistrement  dont  le  champ  ut_type correspond à
       ut->ut_type.  Si  ut->ut_type   vaut   INIT_PROCESS,   LOGIN_PROCESS,   USER_PROCESS,   ou
       DEAD_PROCESS,  getutid()  recherchera  le  premier  enregistrement  dont  le  champ  ut_id
       correspond à ut->ut_id.

       getutline() effectue une recherche dans le fichier utmp, à partir de la position courante.
       Elle  examine  les enregistrements dont le champ ut_type est USER_PROCESS ou LOGIN_PROCESS
       et renvoie le premier dont le champ ut_line correspond à ut->ut_line.

       pututline() écrit la structure utmp ut dans le fichier utmp. Elle utilise  getutid()  pour
       rechercher  l'emplacement  ou  insérer  le  nouvel  enregistrement.  Si elle ne trouve pas
       d'emplacement approprié pour ut, pututline() ajoutera le nouvel enregistrement à la fin du
       fichier.

VALEUR RENVOYÉE

       getutent(), getutid() et getutline() renvoient un pointeur sur une structure utmp, ou NULL
       en cas d'erreur (ce qui inclut le cas « pas d'enregistrement  trouvé »).  Cette  structure
       utmp est allouée statiquement, et peut être écrasée par des appels successifs.

       Si elle réussit, pututline() renvoie ut ; si elle échoue, elle renvoie NULL.

       utmpname()  renvoie  0  si  le  nouveau  nom  a été correctement enregistré, ou -1 si elle
       échoue.

       En cas d'échec, ces fonctions renseignent le code d'erreur dans errno.

ERREURS

       ENOMEM Plus assez de mémoire.

       ESRCH  Enregistrement non trouvé.

       setutent(), pututline() et les fonctions  getut*()  peuvent  également  échouer  pour  les
       raisons décrites dans open(2).

FICHIERS

       /var/run/utmp
              base de données des utilisateurs actuellement connectés

       /var/log/wtmp
              base de données des connexions passées.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌────────────┬──────────────────────┬──────────────────────────────┐
       │InterfaceAttributValeur                       │
       ├────────────┼──────────────────────┼──────────────────────────────┤
       │getutent()  │ Sécurité des threads │ MT-Unsafe init race:utent    │
       │            │                      │ race:utentbuf sig:ALRM timer │
       ├────────────┼──────────────────────┼──────────────────────────────┤
       │getutid(),  │ Sécurité des threads │ MT-Unsafe init race:utent    │
       │getutline() │                      │ sig:ALRM timer               │
       ├────────────┼──────────────────────┼──────────────────────────────┤
       │pututline() │ Sécurité des threads │ MT-Unsafe race:utent         │
       │            │                      │ sig:ALRM timer               │
       ├────────────┼──────────────────────┼──────────────────────────────┤
       │setutent(), │ Sécurité des threads │ MT-Unsafe race:utent         │
       │endutent(), │                      │                              │
       │utmpname()  │                      │                              │
       └────────────┴──────────────────────┴──────────────────────────────┘
       Dans  la  table  ci-dessus,  utent  dans  race:utent  veut  dire  que si une des fonctions
       setutent(), getutent(), getutid(), getutline(), pututline(), utmpname() ou endutent()  est
       utilisée  en parallèle dans différents fils d'exécution (thread) d'un programme, alors des
       situations de concurrences de données peuvent se produire.

CONFORMITÉ

       XPG2, SVr4.

       Dans XPG2 et SVID 2, la fonction pututline() est  décrite  comme  renvoyant  « void »,  et
       c'est  le cas sur de nombreux systèmes (AIX, HP-UX). HP-UX introduit une nouvelle fonction
       _pututline() avec le prototype fourni plus haut pour pututline().

       Toutes ces fonctions sont maintenant obsolètes sur les systèmes non Linux. POSIX.1-2001 et
       POSIX.1-2008, suivant SUSv1, ne proposent aucune de ces fonctions, mais utilisent plutôt

           #include <utmpx.h>

           struct utmpx *getutxent(void);
           struct utmpx *getutxid(const struct utmpx *);
           struct utmpx *getutxline(const struct utmpx *);
           struct utmpx *pututxline(const struct utmpx *);
           void setutxent(void);
           void endutxent(void);

       Ces  fonctions  sont  fournies  par  la  glibc  et  effectuent  les mêmes tâches que leurs
       équivalents sans le « x » mais utilisent une structure utmpx, définie sous Linux pour être
       identique  à la structure utmp. Pour être complet, la glibc fournit également utmpxname(),
       bien que cette fonction ne soit pas spécifiée par POSIX.1.

       Sur quelques autres systèmes, la structure utmpx est un surensemble de la structure  utmp,
       avec des champs supplémentaires, et des versions plus grandes des champs existants, et des
       fichiers sont maintenus en parallèle, souvent /var/*/utmpx et /var/*/wtmpx.

       D'un autre côté, la glibc sous Linux n'utilise pas de fichier utmpx en  parallèle  car  sa
       structure  utmp  est déjà assez grande. Les fonctions contenant un « x » listées ci-dessus
       sont simplement des alias des fonctions sans le « x » (par  exemple,  getutxent()  est  un
       alias de getutent()).

NOTES

   Notes de la glibc
       Les  fonctions ci-dessus ne sont pas sûres dans un contexte de thread. La glibc ajoute les
       versions réentrantes.

       #include <utmp.h>

       int getutent_r(struct utmp *ubuf, struct utmp **ubufp);
       int getutid_r(struct utmp *ut,
                     struct utmp *ubuf, struct utmp **ubufp);
       int getutline_r(struct utmp *ut,
                       struct utmp *ubuf, struct utmp **ubufp);

       Exigences  de   macros   de   test   de   fonctionnalités   pour   la   glibc   (consulter
       feature_test_macros(7)) :

       getutent_r(), getutid_r(), getutline_r() :
           _GNU_SOURCE
           || /* depuis la glibc 2.19: */ _DEFAULT_SOURCE
           || /* glibc <= 2.19: */    _SVID_SOURCE || _BSD_SOURCE

       Ces fonctions sont des extensions GNU, analogues aux fonctions de même nom sans le suffixe
       « _r ». Le paramètre ubuf fournit à ces fonctions un endroit où stocker leur résultat.  Si
       elles  réussissent,  elles  renvoient  0  et  un  pointeur vers le résultat est écrit dans
       *ubufp. Si elles échouent, ces fonctions renvoient -1. Il n'y a pas d'équivalent « utmpx »
       aux fonctions ci-dessus. (POSIX.1 ne spécifie pas ces fonctions.)

EXEMPLES

       L'exemple  suivant ajoute et retire un enregistrement utmp, en supposant qu'il est invoqué
       depuis un pseudoterminal. Dans une véritable application, il faudrait vérifier les valeurs
       renvoyées par getpwuid(3) et ttyname(3).

       #include <string.h>
       #include <stdlib.h>
       #include <pwd.h>
       #include <unistd.h>
       #include <utmp.h>
       #include <time.h>

       int
       main(int argc, char *argv[])
       {
           struct utmp entry;

           system("echo before adding entry:;who");

           entry.ut_type = USER_PROCESS;
           entry.ut_pid = getpid();
           strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen("/dev/"));
           /* only correct for ptys named /dev/tty[pqr][0-9a-z] */
           strcpy(entry.ut_id, ttyname(STDIN_FILENO) + strlen("/dev/tty"));
           time(&entry.ut_time);
           strcpy(entry.ut_user, getpwuid(getuid())->pw_name);
           memset(entry.ut_host, 0, UT_HOSTSIZE);
           entry.ut_addr = 0;
           setutent();
           pututline(&entry);

           system("echo after adding entry:;who");

           entry.ut_type = DEAD_PROCESS;
           memset(entry.ut_line, 0, UT_LINESIZE);
           entry.ut_time = 0;
           memset(entry.ut_user, 0, UT_NAMESIZE);
           setutent();
           pututline(&entry);

           system("echo after removing entry:;who");

           endutent();
           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       getutmp(3), utmp(5)

COLOPHON

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

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>,  Jean-Baptiste  Holcroft
       <jean-baptiste@holcroft.fr> et Grégoire Scano <gregoire.scano@malloc.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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 ⟨⟩.

                                           9 juin 2020                                GETUTENT(3)