-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlisting1.html
executable file
·268 lines (219 loc) · 10 KB
/
listing1.html
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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<!-- BEGIN META TAG INFO -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="home" href="http://developer.apple.com/">
<link rel="find" href="http://developer.apple.com/search/">
<link rel="stylesheet" type="text/css" href="../../documentation/css/adcstyle.css" title="fonts">
<script language="JavaScript" src="../../documentation/js/adc.js" type="text/javascript"></script>
<!-- END META TAG INFO -->
<!-- BEGIN TITLE -->
<title>UTXplorer - /Read Me About UTXplorer.txt</title>
<!-- END TITLE -->
<script language="JavaScript">
function JumpToNewPage() {
window.location=document.scpopupmenu.gotop.value;
return true;
}
</script>
</head>
<!-- BEGIN BODY OPEN -->
<body>
<!--END BODY OPEN -->
<!-- START CENTER OPEN -->
<center>
<!-- END CENTER OPEN -->
<!-- BEGIN LOGO AND SEARCH -->
<!--#include virtual="/includes/adcnavbar"-->
<!-- END LOGO AND SEARCH -->
<!-- START BREADCRUMB -->
<div id="breadcrumb">
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td scope="row"><img width="340" height="10" src="images/1dot.gif" alt=""></td>
<td><img width="340" height="10" src="images/1dot.gif" alt=""></td>
</tr>
<tr valign="middle">
<td align="left" colspan="2">
<a href="http://developer.apple.com/">ADC Home</a> > <a href="../../referencelibrary/index.html">Reference Library</a> > <a href="../../samplecode/index.html">Sample Code</a> > <a href="../../samplecode/Darwin/index.html">Darwin</a> > <a href="../../samplecode/Darwin/idxProcessManagement-date.html">Process Management</a> > <A HREF="javascript:location.replace('index.html');">UTXplorer</A> >
</td>
</tr>
<tr>
<td colspan="2" scope="row"><img width="680" height="35" src="images/1dot.gif" alt=""></td>
</tr>
</table>
</div>
<!-- END BREADCRUMB -->
<!-- START MAIN CONTENT -->
<!-- START TITLE GRAPHIC AND INTRO-->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td><h1><div id="pagehead">UTXplorer</div></h1></td>
</tr>
</table>
<!-- END TITLE GRAPHIC AND INTRO -->
<!-- START WIDE COLUMN -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td id="scdetails">
<h2>/Read Me About UTXplorer.txt</h2>
<form name="scpopupmenu" onSubmit="return false;" method=post>
<p><strong>View Source Code:</strong>
<select name="gotop" onChange="JumpToNewPage();" style="width:340px"><option selected value="ingnore">Select File</option>
<option value="listing1.html">/Read Me About UTXplorer.txt</option>
<option value="listing2.html">/UTXplorer.c</option></select>
</p>
</form>
<p><strong><a href="UTXplorer.zip">Download Sample</a></strong> (“UTXplorer.zip”, 33.4K)<BR>
<strong><a href="UTXplorer.dmg">Download Sample</a></strong> (“UTXplorer.dmg”, 95.5K)</p>
<!--
<p><strong><a href="#">Download Sample</a></strong> (“filename.sit”, 500K)</p>
-->
</td>
</tr>
<tr>
<td scope="row"><img width="680" height="10" src="images/1dot.gif" alt=""><br>
<img height="1" width="680" src="images/1dot_919699.gif" alt=""><br>
<img width="680" height="20" src="images/1dot.gif" alt=""></td>
</tr>
<tr>
<td scope="row">
<!--googleon: index -->
<pre class="sourcecodebox">Read Me About UTXplorer
=======================
1.0
UTXplorer demonstrates basic use of the <utmpx.h> API
<x-man-page://3/getutxent> that was introduced in Mac OS X 10.5 as a replacement
for the "utmp", "wtmp" and "lastlog" files <x-man-page://5/utmp>. You can use
this API to determine which users are logged into the machine and get a
historical records of logins and logouts. Commands like <x-man-page://1/who>
and <x-man-page://1/last> are based on this API.
This sample requires Mac OS X 10.5 (or later) because the <utmpx.h> API was
introduced in that release.
Packing List
------------
The sample contains the following items:
o Read Me About Read Me About UTXplorer.txt -- This file.
o UTXplorer.c -- C source code for the program.
o UTXplorer.xcodeproj -- An Xcode 3.0 project for the program.
o build -- A directory containing a pre-built binary.
Using the Sample
----------------
The sample has a number of different commands. Run the sample with no
arguments to see them all:
$ build/Debug/UTXplorer
usage: UTXplorer command [options] [arguments]
commands:
getutxent [-v] [-w] [-a] [-t type]...
getutxent_wtmp [-v] [-w] [-a] [-t type]...
options:
[...]
getlastlogx uid
getlastlogxbyname username
The "getlastlogx" and "getlastlogxbyname" commands are trivial. Just run them
with a user ID and user name, respectively, to see the last time that user
logged in:
$ build/Debug/UTXplorer getlastlogx 501
time line host
---- ---- ----
2008-02-29 12:27:10 GMT ttys005
$ build/Debug/UTXplorer getlastlogxbyname god
time line host
---- ---- ----
2008-02-29 12:27:10 GMT ttys005
The "getutxent" command displays the events in the 'utmp' database, that is,
the list of users that are currently logged in.
$ build/Debug/UTXplorer getutxent
time type id pid user line [...]
---- ---- -- --- ---- ---- [...]
2008-02-11 14:05:47 GMT BOOT_TIME
2008-02-11 14:12:07 GMT USER_PROCESS / 47 quinn console
2008-02-29 12:00:42 GMT USER_PROCESS s001 41234 quinn ttys001
2008-02-29 12:43:21 GMT USER_PROCESS s005 42417 mrgumby ttys005
If you supply the "-w" option, the command will watch for changes to the state
and display them as they happen. The "-t xxx" option lets you specify exactly
which type of events to report. The "-a" option is a short cut way to request
all event types. The "-v" option requests increasing levels of verbosity.
$ build/Debug/UTXplorer getutxent -w
time type id pid user line [...]
---- ---- -- --- ---- ---- [...]
2008-02-11 14:05:47 GMT BOOT_TIME
2008-02-11 14:12:07 GMT USER_PROCESS / 47 quinn console
2008-02-29 12:00:42 GMT USER_PROCESS s001 41234 quinn ttys001
2008-02-29 12:43:21 GMT USER_PROCESS s005 42417 mrgumby ttys005
[... after logging out mrgumby ...]
2008-02-29 12:44:46 GMT DEAD_PROCESS s005 42417
^C
Use the "getutxent_wtmp" command to view the 'wtmp' database, that is, a
historical record of login and logout events.
$ build/Debug/UTXplorer getutxent_wtmp
[... lots of output ...]
This supports the same set of options as the "getutxent" command, most notably
the "-w" option to watch for new events.
Building the Sample
-------------------
The sample was built using Xcode 3.0 on Mac OS X 10.5. You should be able to
just open the project and choose Build from the Build menu. This will build the
UTXplorer tool in the "build" directory.
How it Works
------------
The "getlastlogx" and "getlastlogxbyname" commands are trivial wrappers around
the APIs of the same name.
The "getutxent" and "getutxent_wtmp" commands are significantly more complex.
They share a common implementation. This code iterates the relevant database
(using either getutxent or getutxent_wtmp) and prints the results. If the "-w"
option is specified, it waits for changes to the database (courtesy of the
<x-man-page://3/notify> API) and prints any new events.
Caveats
-------
The <utmpx.h> API is not thread safe.
The 'utmp' database tracks non-GUI logins on tty-by-tty basis. It gets
confused if two people log in via the same tty (for example, by running
<x-man-page://1/login> manually) <rdar://problem/5771077>.
Credits and Version History
---------------------------
If you find any problems with this sample, mail <[email protected]> and I'll try to
fix them up.
1.0 (Mar 2008) was the first shipping version.
Share and Enjoy.
Apple Developer Technical Support
Core OS/Hardware
10 Mar 2008
</pre>
<!--googleoff: index -->
</td>
</tr>
</table>
<!-- END WIDE COLUMN -->
<!-- END MAIN CONTENT -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><div style="width: 100%; height: 1px; background-color: #919699; margin-top: 5px; margin-bottom: 15px"></div></td>
</tr>
<tr>
<td align="center"><br/>
<table border="0" cellpadding="0" cellspacing="0" class="graybox">
<tr>
<th>Did this document help you?</th>
</tr>
<tr>
<td>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=1&url=/samplecode/UTXplorer/listing1.html%3Fid%3DDTS40007474-1.0&media=dvd" target=_new>Yes</a>: Tell us what works for you.</div>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=2&url=/samplecode/UTXplorer/listing1.html%3Fid%3DDTS40007474-1.0&media=dvd" target=_new>It’s good, but:</a> Report typos, inaccuracies, and so forth.</div>
<div><a href="http://developer.apple.com/feedback/?v=3&url=/samplecode/UTXplorer/listing1.html%3Fid%3DDTS40007474-1.0&media=dvd" target=_new>It wasn’t helpful</a>: Tell us what would have helped.</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- START BOTTOM APPLE NAVIGATION -->
<!--#include virtual="/includes/footer"-->
<!-- END BOTTOM APPLE NAVIGATION -->
<!-- START CENTER CLOSE -->
</center>
<!-- END CENTER CLOSE -->
</body>
</html>