1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
.\" Copyright 1995 Mark D. Roth (roth@uiuc.edu)
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, write to the Free
.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
.\" USA.
.\"
.\" References consulted:
.\" Linux libc source code
.\" Solaris manpages
.\"
.\" Traduction 03/11/1996 par Christophe Blaess (ccb@club-internet.fr)
.\" Mise jour 25/01/2002 - LDP-man-pages-1.47
.\" MJ 21/07/2003 LDP-1.56
.\"
.TH GETUTENT 3 "21 juillet 2003" LDP "Manuel du programmeur Linux"
.SH NOM
getutent, getutid, getutline, pututline, setutent, endutent, utmpname \- Accder aux enregistrements utmp.
.SH SYNOPSIS
.B #include <utmp.h>
.sp
.B struct utmp *getutent (void);
.br
.BI "struct utmp *getutid (struct utmp *" ut );
.br
.BI "struct utmp *getutline (struct utmp *" ut );
.sp
.BI "void pututline (struct utmp *" ut );
.sp
.B void setutent (void);
.br
.B void endutent (void);
.sp
.BI "void utmpname (const char *" file );
.SH DESCRIPTION
\fButmpname()\fP indique le nom du fichier au format utmp utiliser avec les
autres fonctions. Si \fButmpname()\fP n'est pas appel avant les autres fonctions,
elles utiliseront le fichier \fB_PATH_UTMP\fP, dfini dans \fI<paths.h>\fP.
.PP
\fBsetutent()\fP ramne le pointeur au dbut du fichier utmp. Il est gnralement
conseill d'appeler cette fonction au dbut du programme.
.PP
\fBendutent()\fP ferme le fichier utmp. Ceci devrait tre appel une fois que le
programme a termin ses accs au fichier.
.PP
\fBgetutent()\fP lit une ligne du fichier utmp, la position courante.
Elle renvoie un pointeur sur une structure contenant les divers champs
de la ligne.
.PP
\fBgetutid()\fP effectue une recherche dans le fichier utmp, partir de la position
courante, en se basant sur \fIut\fP.
Si \fIut\fP->ut_type vaut \fBRUN_LVL\fP, \fBBOOT_TIME\fP,
\fBNEW_TIME\fP, ou \fBOLD_TIME\fP,
\fBgetutid()\fP recherchera le premier enregistrement dont le champ
ut_type corresponde \fIut\fP->ut_type.
Si \fIut\fP->ut_type vaut \fBINIT_PROCESS\fP, \fBLOGIN_PROCESS\fP,
\fBUSER_PROCESS\fP, ou \fBDEAD_PROCESS\fP,
\fBgetutid()\fP recherchera le premier enregistrement dont le champ
ut_id corresponde \fIut\fP->ut_id.
.PP
\fBgetutline()\fP effectue une recherche dans le fichier utmp, partir de la position
courante.
Elle examine les enregistrements dont le champ ut_type soit \fBUSER_PROCESS\fP
ou \fBLOGIN_PROCESS\fP et renvoie le premier dont le champ \fBut_line\fP corresponde
\fIut\fP->\fBut_line\fP.
.PP
\fBpututline()\fP crit la structure utmp \fIut\fP dans le fichier utmp. Elle
utilise \fBgetutid()\fP pour rechercher l'emplacement ou insrer le nouvel
enregistrement.
Si elle ne trouve pas d'emplacement appropri \fBpututline()\fP ajoutera le
nouvel enregistrement la fin du fichier.
.SH "VALEUR RENVOYE"
\fBgetutent\fP(), \fBgetutid\fP(), \fBgetutline\fP() et \fBpututline\fP()
renvoient un pointeur sur une
\fBstruct utmp\fP statique, dfinie dans \fI<utmp.h>\fP comme ci-dessous,
ou NULL en cas d'erreur.
.nf
struct utmp {
short ut_type; /* Type de connexion */
pid_t ut_pid; /* PID de la connexion */
char ut_line[12]; /* Priphrique de connexion */
char ut_id[4]; /* Nom de tty abrg */
time_t ut_time; /* Heure de connexion */
char ut_user[8]; /* Nom d'utilisateur */
char ut_host[16]; /* Nom d'hte distant */
long ut_addr; /* Adresse IP d'hte distant */
};
.fi
.SH EXEMPLE
L'exemple suivant ajoute et retire un enregistrement utmp, en supposant
qu'il est invoqu depuis un pseudo-terminal. Dans une vritable application,
il faudrait vrifier les valeurs renvoyes par \fBgetpwuid\fP() et
\fBttyname\fP().
.PP
.nf
#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 Avant d ajouter un enregistrement :;who");
entry . ut_type = USER_PROCESS;
entry . ut_pid = getpid();
strcpy (entry . ut_line, ttyname (0) + strlen ("/dev/"));
/* ne fonctionne qu'avec les pseudo tty /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 Apres l ajout :;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 Apres suppression de l enregistrement :;who");
endutent ();
return (0);
}
.fi
.SH FICHIERS
/var/run/utmp - Base de donnes des utilisateurs connects.
.br
/var/log/wtmp - Base de donnes des connexions passes.
.SH "CONFORMIT"
XPG 2, SVID 2, Linux FSSTND 1.2
.LP
Dans XPG2 et SVID2 la fonction \fIpututline()\fP est dcrite comme
de type void, et c'est les cas sur de nombreux systmes
(AIX, HPUX, Linux libc5).
HPUX introduit une nouvelle fonction \fI_pututline()\fP avec le prototype
fourni plus haut pour \fIpututline()\fP (comme avec la libc5 de Linux).
.LP
Toutes ces fonctions sont obsoltes maintenant sur les systmes non-Linux.
POSIX 1003.1-2001, comme XPG4.2, ne propose aucune de ces fonctions,
mais utilise plutt
.sp
.B #include <utmpx.h>
.sp
.B struct utmpx *getutxent(void);
.br
.B struct utmpx *getutxid(const struct utmpx *);
.br
.B struct utmpx *getutxline(const struct utmpx *);
.br
.B struct utmpx *pututxline(const struct utmpx *);
.br
.B void setutxent(void);
.br
.B void endutxent(void);
.sp
La structure \fIutmpx\fP est un sur-ensemble de la structure \fIutmp\fP,
avec des champs supplmentaires, et une version plus large des champs existants.
Les fichiers correspondants sont souvent
.I /var/*/utmpx
et
.IR /var/*/wtmpx .
.LP
D'un autre ct, la GlibC sous Linux n'utilise pas \fIutmpx\fP car sa structure
\fIutmp\fP est dj assez grande. Les fonctions \fIgetutxent\fP
etc. sont des alias pour \fIgetutent\fP etc.
.SH "VOIR AUSSI"
.BR utmp (5)
.SH TRADUCTION
Christophe Blaess, 1996-2003.
|