File: getutent.3

package info (click to toggle)
manpages-fr 1.58.1-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 10,104 kB
  • ctags: 4
  • sloc: makefile: 106; sh: 8
file content (202 lines) | stat: -rw-r--r-- 6,945 bytes parent folder | download
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.