お題:isatty(3)が端末上で動作しているか判定する仕組みを調査せよ
※この章は「デーモン君のソース探検」に載っていませんが、msakamoto-sf自身が個人的に興味を持って調べ、"Appendix"として読書メモシリーズに入れてありますのでご注意下さい。
ソースファイルの場所を把握:
$ locate isatty /usr/share/man/cat3/isatty.0 /usr/share/man/man3/isatty.3 /usr/src/gnu/dist/libf2c/libU77/isatty_.c /usr/src/gnu/dist/toolchain/libf2c/libU77/isatty_.c /usr/src/lib/libc/gen/isatty.c
ソースコード:
int isatty(fd) int fd; { struct termios t; return(tcgetattr(fd, &t) != -1); }
tcgetattr(3)のソースファイル:
$ locate tcgetattr /usr/share/man/cat3/tcgetattr.0 /usr/share/man/man3/tcgetattr.3 /usr/src/lib/libc/termios/tcgetattr.c
ソースコード:
int tcgetattr(fd, t) int fd; struct termios *t; { _DIAGASSERT(t != NULL); return (ioctl(fd, TIOCGETA, t)); }
以上より、最終的にはioctl(2)を使ってデバイスドライバ経由で情報を取得出来れば端末上で動作していると判定していることが分かった。
今回のお題については、ここまで。