/*who1.c - a first version of the who program pen read UTMP file, and show results */ #include <stdio.h> #include <stdlib.h> #include <utmp.h> #include <fcntl.h> #include <unistd.h> #define SHOWHOST /* include remote machine on output */ int main() { struct utmp current_record; /* read info into here */ int utmpfd; int reclen = sizeof(current_record); if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1) { perror( UTMP_FILE ); /* UTMP_FILE is in utmp.h */ exit(1); } while (read(utmpfd, ¤t_record, reclen) == reclen) show_info(¤t_record); close(utmpfd); return 0; /* went ok */ } /* * show info() * displays contents of the utmp struct in human readable form */ show_info( struct utmp *utbufp ) { printf("%-8.8s", utbufp->ut_name); printf(" "); printf("%-8.8s", utbufp->ut_line); printf(" "); printf("%10ld", utbufp->ut_time); printf(" "); #ifdef SHOWHOST printf("(%s)", utbufp->ut_host); #endif printf("\n"); } * open read UTMP file, and show results */ #include <stdio.h> #include <stdlib.h> #include <utmp.h> #include <fcntl.h> #include <unistd.h> #define SHOWHOST /* include remote machine on output */ int main() { struct utmp current_record; /* read info into here */ int utmpfd; int reclen = sizeof(current_record); if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1) { perror( UTMP_FILE ); /* UTMP_FILE is in utmp.h */ exit(1); } while (read(utmpfd, ¤t_record, reclen) == reclen) show_info(¤t_record); close(utmpfd); return 0; /* went ok */ } /* * show info() * displays contents of the utmp struct in human readable form */ show_info( struct utmp *utbufp ) { printf("%-8.8s", utbufp->ut_name); printf(" "); printf("%-8.8s", utbufp->ut_line); printf(" "); printf("%10ld", utbufp->ut_time); printf(" "); #ifdef SHOWHOST printf("(%s)", utbufp->ut_host); #endif printf("\n"); }