Unix/Linuxプログラミング理論と実践 第2章(who)
http://www.amazon.co.jp/gp/product/4048700219
良書と評判の本書.FreeBSDで第2章のwhoを実装するにはいくつか対応が必要だった.
環境:FreeBSD 8.2-STABLE
"UTMP_FILE"が無い
UTMPの情報が記載されているファイルを"UTMP_FILE"で指定していて,プログラム中には以下のコメントがある.
/* UTMP_FILEはutmp.hで定義されている */
しかし,/usr/include/utmp.hには"UTMP_FILE"はない.
かわりに下のように定義されているので,"UTMP_FILE"ではなく"_PATH_UTMP"を利用する.
#define _PATH_UTMP "/var/run/utmp"
ut_typeが無い
空レコードを排除するために,struct utmpのut_typeメンバを利用している.
しかし,utmp.hのstruct utmpにはut_typeメンバがない.
struct utmp { char ut_line[UT_LINESIZE]; char ut_name[UT_NAMESIZE]; char ut_host[UT_HOSTSIZE]; int32_t ut_time; };
対応としてはut_nameが空なら読み飛ばせば良い.
FreeBSDのwhoコマンドではこうやって読み飛ばしている(utはstruct utmp).
if (*ut.ut_name == '\0') continue;