1 static char *sccsid = "@(#)users.c 4.1 (Berkeley) 10/01/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 } 64