whoコマンドっぽいやつ

30分プログラム、その350。whoコマンドっぽいやつ。
Unix/Linuxプログラミング理論と実践を読んでたら、whoコマンドを実装したくなった。ホントはErlangで実装してバイナリ構文すげー、ってやろうしたら処理系がインストールされてなかった。
なので、とりあえずC言語で実装してみた。

使い方

$ gcc mywho.c -Wall -o mywho
$ ./mywho
mzp console
mzp ttys000
mzp ttys001
mzp ttys002
mzp ttys003
mzp ttys004
mzp ttys005
mzp ttys006
mzp ttys007

# 元のやつ
$ who
mzp      console   8 18 20:04
mzp      ttys000   8 18 23:57
mzp      ttys001   8 18 20:05
mzp      ttys002   8 18 20:05
mzp      ttys003   8 18 20:15
mzp      ttys004   8 18 23:48
mzp      ttys006   8 18 23:37

ソースコード

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <utmpx.h>


int main(int argc,char* argv[]){
  int fd = open("/var/run/utmpx",O_RDONLY);
  struct utmpx utmpx;

  while(read(fd,&utmpx,sizeof utmpx) != 0){
    printf("%s %s\n", utmpx.ut_user,utmpx.ut_line);
  }
  close(fd);
  return 0;
}