GETUTENT(3)

NOME
getutent, getutid, getutline, pututline, setutent, endutent, utmpname - acessam entradas do arquivo utmp

SINÓPSE
#include <utmp.h>

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

void pututline(struct utmp *ut);

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

void utmpname(const char *file);

DESCRIÇÃO
utmpname() ajusta o nome do arquivo de formato utmp para outras funções utmp acessarem. Se utmpname() não for usado para ajustar o nome do arquivo antes das outras funções serem usadas, elas assumem _PATH_UTMP, como definido em <paths.h>.

setutent() retrocede o ponteiro do arquivo para o início do arquivo utmp. É geralmente uma boa idéia chamá-la antes de qualquer outra função.

endutent() fecha o arquivo utmp. Ela deveria ser chamada quando o código do usuário terminou de acessar o arquivo com as outras funções.

getutent() lê uma linha da posição atual do arquivo utmp. Ela retorna um ponteiro para uma estrutura contendo os campos da linha.

getutid() busca para frente a partir da posição atual no arquivo utmp baseando-se em ut. Se ut->ut_type é RUN_LVL, BOOT_TIME, NEW_TIME, ou OLD_TIME, getutid() encontrará a primeira entrada da qual o campo ut_type iguala-se a ut->ut_type. Se ut->ut_type é qualquer um de INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS, ou DEAD_PROCESS, getutid() encontrará a primeira entrada da qual o campo ut_id iguala-se a ut->ut_id.

getutline() busca para frente a partir da posição atual no arquivo utmp. Ela busca entradas nas quais ut_type é USER_PROCESS ou LOGIN_PROCESS e retorna a primeira da qual o campo ut_line se iguala a ut->ut_line.

pututline() grava a estrutura utmp ut no arquivo utmp. Ela usa getutid() para encontrar o lugar apropriado no arquivo para inserir a nova entrada. Se ela não pode encontrar um espaço apropriado para ut, pututline() irá anexar a nova entrada ao fim do arquivo.

VALORES RETORNADOS
getutent(), getutid(), e getutline() retornam um ponteiro para uma static struct utmp.

ERROS
No erro, (struct utmp*)0 será retornado.

EXEMPLO
O seguinte exemplo adiciona e remove um registro utmp, assumindo que está sendo executado num pseudo terminal. Para uso em uma aplicação real, você deverá verificar os valores de retorno de getpwuid() e ttyname().

#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 antes de adicionar entrada:;who");
  entry.ut_type=USER_PROCESS;
  entry.ut_pid=getpid();
  strcpy(entry.ut_line,ttyname(0)+strlen("/dev/"));
  /* only correct for ptys named /dev/tty[pqr][0-9a-z] */
  strcpy(entry.ut_id,ttyname(0)+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 depois de adicionar entrada:;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 depois de remover entrada:;who");
  endutent();
  return 0;
}

ARQUIVOS
/var/run/utmp    banco de dados dos usuários conectados
/var/log/wtmp    banco de dados dos logins passados de usuários

DE ACORDO COM
XPG 2, SVID 2, Linux FSSTND 1.2.

VEJA TAMBÉM
utmp(5).

TRADUZIDO POR LDP-BR em 28/05/2001.

  Tradução:
Felipe M Pereira <Felipe.Pereira@ic.unicamp.br>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>