1: static char *sccsid = "@(#)who.c 4.4 (Berkeley) 3/15/82";
2: /*
3: * who
4: */
5:
6: #include <whoami.h>
7: #include <stdio.h>
8: #include <utmp.h>
9: #include <pwd.h>
10: #include <ctype.h>
11:
12: #define NMAX sizeof(utmp.ut_name)
13: #define LMAX sizeof(utmp.ut_line)
14:
15: struct utmp utmp;
16: struct passwd *pw;
17: struct passwd *getpwuid();
18:
19: char *ttyname(), *rindex(), *ctime(), *strcpy();
20:
21: main(argc, argv)
22: int argc;
23: char **argv;
24: {
25: register char *tp, *s;
26: register FILE *fi;
27: extern char _sobuf[];
28:
29: setbuf(stdout, _sobuf);
30: s = "/etc/utmp";
31: if(argc == 2)
32: s = argv[1];
33: if (argc==3) {
34: tp = ttyname(0);
35: if (tp)
36: tp = rindex(tp, '/') + 1;
37: else { /* no tty - use best guess from passwd file */
38: pw = getpwuid(getuid());
39: strcpy(utmp.ut_name, pw?pw->pw_name: "?");
40: strcpy(utmp.ut_line, "tty??");
41: time(&utmp.ut_time);
42: putline();
43: exit(0);
44: }
45: }
46: if ((fi = fopen(s, "r")) == NULL) {
47: puts("who: cannot open utmp");
48: exit(1);
49: }
50: while (fread((char *)&utmp, sizeof(utmp), 1, fi) == 1) {
51: if(argc==3) {
52: if (strcmp(utmp.ut_line, tp))
53: continue;
54: putline();
55: exit(0);
56: }
57: if(utmp.ut_name[0] == '\0' && argc==1)
58: continue;
59: putline();
60: }
61: }
62:
63: putline()
64: {
65: register char *cbuf;
66:
67: printf("%-*.*s %-*.*s", NMAX, NMAX, utmp.ut_name, LMAX, LMAX, utmp.ut_line);
68: cbuf = ctime(&utmp.ut_time);
69: printf("%.12s\n", cbuf+4);
70: }
Defined functions
main
defined in line
21;
never used
Defined variables
pw
defined in line
16; used 3 times
sccsid
defined in line
1;
never used
utmp
defined in line
15; used 12 times
Defined macros
LMAX
defined in line
13; used 2 times
NMAX
defined in line
12; used 2 times