Provided by: manpages-es_1.55-10_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)