|
|
1.1 root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.