Provided by: manpages-fr-dev_4.21.0-2_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 pro‐
       duire.

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 pa‐
       rallè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éen‐
       trantes.

       #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 pa‐
       ramè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  ren‐
       voient  -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 pseu‐
       doterminal. 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 <tvi‐
       gnaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe  Guérard  <fe‐
       vrier@tigreraye.org>,  Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@de‐
       bian.org>,  Thomas  Huriaux  <thomas.huriaux@gmail.com>,   Nicolas   François   <nicolas.francois@centra‐
       liens.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-bap‐
       tiste@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 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 à de‐
       bian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                    5 février 2023                                      getutent(3)