Provided by: manpages-fr-dev_2.64.1-1_all bug

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);

       void utmpname(const char *file);

DESCRIPTION

       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.

       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é,
       pututline() ajoutera le nouvel enregistrement à la fin du fichier.

VALEUR RENVOYÉE

       getutent(), getutid(), getutline() et pututline() renvoient un pointeur
       sur  une structure utmp, ou NULL en cas d’erreur. Cette structure Butmp
       est  allouée  statiquement,  et  peut  être  écrasée  par  des   appels
       successifs.

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);

       La  structure  utmpx  est un surensemble de la structure utmp, avec des
       champs supplémentaires, et une version plus large des champs existants.
       Les  fichiers correspondants sont souvent /var/*/utmpx et /var/*/wtmpx.

       D’un autre côté, la  glibc  sous  Linux  n’utilise  pas  utmpx  car  sa
       structure utmp est déjà assez grande. Les fonctions getutxent etc. sont
       des alias pour getutent etc.

NOTES

   Notes à propos de 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.

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

       utmp(5), feature_test_macros(7)

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

                                25 juillet 1996                    GETUTENT(3)