Provided by: manpages-fr-dev_4.27.0-1_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

       Aucun.

HISTORIQUE

       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 avant l'ajout d'une entrée :;who");

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

           system("echo après l'ajout d'une entrée :;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 après le retrait d'une entrée:;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 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.

Pages du manuel de Linux 6.9.1                     2 mai 2024                                        getutent(3)