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()で設定しただけでは,ファイルサイズは変わらない.