|
|
1.1 root 1: static char *sccsid = "@(#)users.c 4.1 (Berkeley) 10/1/80";
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.