Commit | Line | Data |
---|---|---|
407aebd6 BJ |
1 | static char *sccsid = "@(#)users.c 4.1 (Berkeley) %G%"; |
2 | /* | |
3 | * users | |
4 | */ | |
5 | char *malloc(); | |
6 | ||
7 | #include <stdio.h> | |
8 | #include <utmp.h> | |
9 | ||
10 | #define NMAX sizeof(utmp.ut_name) | |
11 | #define LMAX sizeof(utmp.ut_line) | |
12 | ||
13 | struct utmp utmp; | |
14 | ||
15 | main(argc, argv) | |
16 | char **argv; | |
17 | { | |
18 | register char *tp, *s; | |
19 | register FILE *fi; | |
20 | ||
21 | s = "/etc/utmp"; | |
22 | if(argc == 2) | |
23 | s = argv[1]; | |
24 | if ((fi = fopen(s, "r")) == NULL) { | |
25 | puts("who: cannot open utmp"); | |
26 | exit(1); | |
27 | } | |
28 | while (fread((char *)&utmp, sizeof(utmp), 1, fi) == 1) { | |
29 | if(utmp.ut_name[0] == '\0') | |
30 | continue; | |
31 | putline(); | |
32 | } | |
33 | summary(); | |
34 | } | |
35 | ||
36 | char *names[128]; | |
37 | char **namp = names; | |
38 | putline() | |
39 | { | |
40 | char temp[NMAX+1]; | |
41 | strncpy(temp, utmp.ut_name, NMAX); | |
42 | temp[NMAX] = 0; | |
43 | *namp = malloc(strlen(temp) + 1); | |
44 | strcpy(*namp++, temp); | |
45 | } | |
46 | ||
47 | scmp(p, q) | |
48 | char **p, **q; | |
49 | { | |
50 | return(strcmp(*p, *q)); | |
51 | } | |
52 | summary() | |
53 | { | |
54 | register char **p; | |
55 | ||
56 | qsort(names, namp - names, sizeof names[0], scmp); | |
57 | for (p=names; p < namp; p++) { | |
58 | if (p != names) | |
59 | printf(" "); | |
60 | printf("%s", *p); | |
61 | } | |
62 | printf("\n"); | |
63 | } |