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