Unix/Linuxプログラミング理論と実践 第2章(研究課題)

備忘録です.解答にはなっていないかったりします.
環境:FreeBSD 8.2-STABLE
http://www.amazon.co.jp/gp/product/4048700219

2.1 wコマンド

whoとwを実行して結果を比較してみると,wではidle時間が表示されていることが分かる.
wコマンドのソースコードを見てみると,"現在時間-最後にttyにアクセスした時間"がidle時間とされている.

                if ((ep->idle = now - touched) < 0)
                        ep->idle = 0;

wコマンドは,下の構造体を定義して使っている.
dev_t tdev(デバイス番号),struct kinfo_proc *kp(トップレベルのプロセス?),char *args(引数のリスト)なども利用している様子.

/*
 * One of these per active utmp entry.
 */
struct  entry {
        struct  entry *next;
        struct  utmp utmp;
        dev_t   tdev;                   /* dev_t of terminal */
        time_t  idle;                   /* idle time of terminal in seconds */
        struct  kinfo_proc *kp;         /* `most interesting' proc */
        char    *args;                  /* arg list of interesting process */
        struct  kinfo_proc *dkp;        /* debug option proc list */
} *ep, *ehead = NULL, **nextp = &ehead;

2.4

FILE構造体は,/usr/include/stdio.hで定義されている.

2.5

syncシステムコールとsyncユーティリティ

2.9

$ man lseek に書いてあるとおり,lseek()でEOF以降に位置を設定して書き込むことが可能.
その場合,元のEOFから書き込み位置までの間を読み出すと 0 が返ってくる.
lseek()で設定しただけでは,ファイルサイズは変わらない.