/********************************************************************** * Copyright (c) Digital Equipment Corporation 1984, 1985, 1986. * * All Rights Reserved. * * Reference "/usr/src/COPYRIGHT" for applicable restrictions. * **********************************************************************/ static char Sccsid[] = "@(#)users.c 3.0 4/22/86"; /* * users */ char *malloc(); #include <stdio.h> #include <utmp.h> #define NMAX sizeof(utmp.ut_name) #define LMAX sizeof(utmp.ut_line) struct utmp utmp; main(argc, argv) char **argv; { register char *tp, *s; register FILE *fi; s = "/etc/utmp"; if(argc == 2) s = argv[1]; if ((fi = fopen(s, "r")) == NULL) { puts("who: cannot open utmp"); exit(1); } while (fread((char *)&utmp, sizeof(utmp), 1, fi) == 1) { if(utmp.ut_name[0] == '\0') continue; putline(); } summary(); } char *names[128]; char **namp = names; putline() { char temp[NMAX+1]; strncpy(temp, utmp.ut_name, NMAX); temp[NMAX] = 0; *namp = malloc(strlen(temp) + 1); strcpy(*namp++, temp); } scmp(p, q) char **p, **q; { return(strcmp(*p, *q)); } summary() { register char **p; qsort(names, namp - names, sizeof names[0], scmp); for (p=names; p < namp; p++) { if (p != names) printf(" "); printf("%s", *p); } printf("\n"); }