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