whoコマンドを作成してみた。 - A Day In The Life
Macは使いません。(今回のばあいはutmp.hがないとかどうとか言われる)
/* who1.c whoプログラムの最初のバージョン * utmpファイルをオープンし、読み出した結果を表示する */ #include <stdio.h> #include <utmp.h> #include <fcntl.h> #include <unistd.h> #define SHOWHOST /* 出力にリモートマシン名を組込む */ int main() { struct utmp current_record; /* 情報をここに読み込む */ int utmpfd; /* このデスクリプタから読み出す */ int reclen = sizeof(current_record); if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1) { perror( UTMP_FILE ); /* UTMP_FILEはutmp.hで定義されている */ exit(1); } while ( read(utmpfd, ¤t_record, reclen) == reclen ) show_info(¤t_record); close(utmpfd); return 0; /* うまくいった */ } /* * show_info() * utmp構造体の内容を人間が読めるように表示する * *注意* サイズ情報をハードコードしてはならない */ show_info( struct utmp *utbufp ) { printf ("%-8.8s", utbufp->ut_name); /* ログイン名 */ printf (" "); /* スペース */ printf ("%-8.8s", utbufp->ut_line); /* tty */ printf (" "); /* スペース */ printf ("%-101d", utbufp->ut_time); /* ログイン時刻 */ printf (" "); /* スペース */ #ifdef SHOWHOST printf ("(%s)", utbufp->ut_host); /* ホスト */ #endif printf ("\n"); /* 改行 */ };
コンパイル、そして実行
$ cc who1.c -o who1