Provided by: manpages-es_1.55-8_all bug

NOMBRE

       getutent, getutid, getutline, pututline, setutent, endutent, utmpname -
       acceden a las entradas del fichero utmp

SINOPSIS

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

DESCRIPCIÓN

       utmpname() establece qué nombre tiene el fichero en formato utmp al que
       van  a  acceder las otras funciones descritas aquí. Si utmpname() no se
       llama para establecer el nombre de fichero antes de  que  se  usen  las
       otras  funciones,  se  asume  el  nombre  _PATH_UTMP, como se define en
       <paths.h>.

       setutent() rebobina el indicador de fichero al  principio  del  fichero
       utmp.  Generalmente  es  una Buena Idea llamar a esta función antes que
       cualquiera de las siguientes.

       endutent() cierra el fichero utmp. Debe llamarse cuando  el  código  de
       usuario ha terminado de acceder al fichero con las otras funciones.

       getutent()  lee  una línea desde donde está actualmente el indicador de
       posición del fichero en el de formato utmp. Devuelve un puntero  a  una
       estructura que contiene los campos correspondientes a la línea.

       getutid()  busca  hacia adelante desde la posición actual en el fichero
       utmp según ut.  Si  ut->ut_type  es  RUN_LVL,  BOOT_TIME,  NEW_TIME,  u
       OLD_TIME,  getutid()  encontrará  la primera entrada cuyo campo ut_type
       concuerde con ut->ut_type.  Si  ut->ut_type  es  uno  de  INIT_PROCESS,
       LOGIN_PROCESS,  USER_PROCESS,  o  DEAD_PROCESS, getutid() encontrará la
       primera entrada cuyo campo ut_id coincida con ut->ut_id.

       getutline() busca hacia adelante desde la posición actual en el fichero
       utmp.   Rastrea  las  entradas  cuyo  campo  ut_type sea USER_PROCESS o
       LOGIN_PROCESS y devuelve la primera cuyo  campo  ut_line  coincida  con
       ut->ut_line.

       pututline()  escribe  la estructura utmp ut en el fichero utmp. Utiliza
       getutid() para buscar el sitio correcto en el fichero donde insertar la
       nueva  entrada.  Si  no  puede  encontrar  un  sitio apropiado para ut,
       pututline() añadirá la nueva entrada al final del fichero.

VALOR DEVUELTO

       getutent(), getutid(), getutline() y pututline() devuelven un puntero a
       una static struct utmp en caso de éxito y NULL en caso de error.

EJEMPLO

       El  siguiente ejemplo añade y quita un registro utmp, suponiendo que se
       ejecuta  desde  una  pseudo-terminal.  Para  un  uso  correcto  en  una
       aplicación  más realística, se deberían comprobar los valores devueltos
       por getpwuid() y ttyname().

       #include <string.h>
       #include <stdlib.h>
       #include <pwd.h>
       #include <unistd.h>
       #include <time.h>
       #include <utmp.h>

       int main(int argc, char *argv[])
       {
         struct utmp entrada;

         system("echo antes de añadir la entrada:;who");

         entrada.ut_type = USER_PROCESS;
         entrada.ut_pid = getpid();
         strcpy(entrada.ut_line, ttyname(0) + strlen("/dev/"));
         /* sólo correcto para ptys llamadas /dev/tty[pqr][0-9a-z] */
         strcpy(entrada.ut_id, ttyname(0) + strlen("/dev/tty"));
         time(&entrada.ut_time);
         strcpy(entrada.ut_user, getpwuid(getuid())->pw_name);
         memset(entrada.ut_host, 0, UT_HOSTSIZE);
         entrada.ut_addr = 0;
         setutent();
         pututline(&entrada);

         system("echo tras añadir la entrada:;who");

         entrada.ut_type = DEAD_PROCESS;
         memset(entrada.ut_line, 0, UT_LINESIZE);
         entrada.ut_time = 0;
         memset(entrada.ut_user, 0, UT_NAMESIZE);
         setutent();
         pututline(&entrada);

         system("echo tras borrar la entrada:;who");

         endutent();
         return 0;
       }

FICHEROS

       /var/run/utmp  datos de los usuarios que están en el sistema
       /var/log/wtmp  datos de entradas de usuario anteriores

CONFORME A

       XPG 2, SVID 2, Linux FSSTND 1.2

       En XPG2 y SVID2 se dice que la función pututline() devuelve void, y así
       es  en  muchos  sistemas  (AIX, HPUX, Linux libc5).  HPUX introduce una
       nueva  función  _pututline()  con  el  prototipo   dado   arriba   para
       pututline() (también encontrada en Linux libc5).

       Todas  estas  funciones  están  obsoletas hoy día en sistemas no-Linux.
       POSIX 1003.1-2001, siguiendo  a  XPG4.2,  no  tiene  ninguna  de  estas
       funciones, pero en su lugar usa

       #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  estructura  utmpx  es  un  superconjunto de la estructura utmp, con
       campos adicionales, y versiones extendidas de  los  campos  existentes.
       Los ficheros correspondientes son a menudo /var/*/utmpx y /var/*/wtmpx.

       Linux glibc por otra parte no usa utmpx puesto que su  estructura  utmp
       es  ya  lo  suficientemente  grande.  Las  funciones getutxent etc. son
       sinónimos para getutent etc.

VÉASE TAMBIÉN

       utmp(5)