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
putline defined in line 55; used 3 times

Defined variables

pw defined in line 9; used 3 times
utmp defined in line 8; used 10 times
Last modified: 1979-05-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 645
Valid CSS Valid XHTML 1.0 Strict