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