dwww Home | Manual pages | Find package

getutent(3)                Library Functions Manual                getutent(3)

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
       New applications should use the POSIX.1-specified "utmpx"  versions  of
       these functions; see STANDARDS.

       utmpname() indique le nom du fichier au format utmp à utiliser avec les
       autres fonctions. Si utmpname() n'est pas appelé avant les autres fonc-
       tions, 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éra-
       lement 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  en-
       registrement  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 uti-
       lise getutid() pour rechercher l'emplacement ou insérer le nouvel enre-
       gistrement.  Si elle ne trouve pas d'emplacement approprié pour ut, pu-
       tutline() 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  statique-
       ment, 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.

       On failure, these functions errno set to indicate the error.

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  concur-
       rences de données peuvent se produire.

STANDARDS
       XPG2, SVr4.

       Dans  XPG2  et  SVID 2,  la fonction pututline() est décrite comme ren-
       voyant « 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 Li-
       nux.  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 fonc-
       tion 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  ge-
       tutent()).

NOTES
   Notes de la glibc
       The above functions are not thread-safe. glibc adds reentrant versions

       #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
               || /* Since 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  ren-
       voient  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 fonc-
       tions.)

EXEMPLES
       L'exemple suivant ajoute et retire un enregistrement utmp, en supposant
       qu'il est invoqué depuis un pseudoterminal. Dans une véritable applica-
       tion, 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 Chris-
       tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <ste-
       phan.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.cou-
       lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>,  Thomas  Huriaux
       <thomas.huriaux@gmail.com>,  Nicolas François <nicolas.francois@centra-
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon  Paillard  <si-
       mon.paillard@resel.enst-bretagne.fr>,    Denis   Barbier   <barbier@de-
       bian.org>, David  Prévot  <david@tilapin.org>,  Jean-Baptiste  Holcroft
       <jean-baptiste@holcroft.fr>   et  Grégoire  Scano  <gregoire.scano@mal-
       loc.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⟩.

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

Generated by dwww version 1.15 on Sat Jun 29 00:39:06 CEST 2024.