home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / who.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-05-05  |  1.1 KB  |  63 lines

  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. }
  63.