Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

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 STANDARDS.

       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 définissent errno pour indiquer l'erreur.

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(), getutline()  │ Sécurité des threads │ MT-Unsafe init race:utent sig:ALRM      │
       │                        │                      │ timer                                   │
       ├────────────────────────┼──────────────────────┼─────────────────────────────────────────┤
       │pututline()             │ Sécurité des threads │ MT-Unsafe race:utent sig:ALRM timer     │
       ├────────────────────────┼──────────────────────┼─────────────────────────────────────────┤
       │setutent(), endutent(), │ Sécurité des threads │ MT-Unsafe race:utent                    │
       │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.

STANDARDS

       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 <pwd.h>
       #include <stdlib.h>
       #include <string.h>
       #include <time.h>
       #include <unistd.h>
       #include <utmp.h>

       int
       main(void)
       {
           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)

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⟩.