Loading

NOM

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

SYNOPSIS

       #include <utmp.h>

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

       struct utmp *pututline(struct utmp *ut);

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

       int utmpname(const char *file);

       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.

ERREURS

       ENOMEM Plus de mémoire disponible.

       ESRCH  Enregistrement non trouvé.

       setutent(),  pututent()  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 connectés.
       /var/log/wtmp - Base de données des connexions passées.

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, Linux libc5). HP-UX introduit une nouvelle fonction _pututline()
       avec  le prototype fourni plus haut pour pututline() (existe aussi dans
       la libc5 de Linux).

       Toutes ces fonctions sont maintenant obsolètes  sur  les  systèmes  non
       Linux. POSIX.1-2001, suivant SUSv1, ne propose aucune de ces fonctions,
       mais utilise 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 sur-ensemble 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
       getutxent() etc. sont des alias pour getutent() etc.

NOTES

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

       #define _GNU_SOURCE    /* ou _SVID_SOURCE ou _BSD_SOURCE */
       #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);

       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 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 de telles
       fonctions.)

EXEMPLE

       L’exemple suivant ajoute et retire un enregistrement utmp, en supposant
       qu’il  est  invoqué  depuis  un  pseudo-terminal.  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>

       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), feature_test_macros(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.23 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».

                                 29 juin 2008