EN JA
TTYSLOT(3)
TTYSLOT(3) Linux Programmer's Manual TTYSLOT(3)

名前

ttyslot -カレントユーザの端末のスロットをファイルから探す

書式

#include <unistd.h> /* BSD 系のシステムと Linux の場合 */
 
#include <stdlib.h> /* System V 系のシステムの場合 */
 
int ttyslot(void);
 

glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
 
ttyslot():
_BSD_SOURCE ||
 
_XOPEN_SOURCE && _XOPEN_SOURCE_ < 500 && _XOPEN_SOURCE_EXTENDED

説明

レガシーな関数 ttyslot() は、あるファイルに書かれているカレントユーザのエントリのインデックスを返す。

「どのファイルなのか?」という質問があるだろう。では、まず最初にその歴史を見てみよう。

大昔の歴史

UNIX V6 では /etc/ttys ファイルが使われていた。 init(8) プログラムは、このファイルを読み込み、各端末行で何をすべきかを探す。各行は 3 文字から構成されている。 1 文字目は'0'または'1'であり、'0'は「無視する」ことを表す。 2 文字目は端末を示す: '8'は "/dev/tty8"を表す。 3 文字目は getty(8) への引き数であり、(接続を) 試みる回線速度の順序を表す ('-'は 110 ボーで接続の試行を開始することを表す)。よって一般的な行は "18-"となる。ある行でハングした場合は、'1'を'0'に変更し、 init にシグナルを送り、'0'を'1'再度に変更し、 init に再度シグナルを送ることで解決する。

UNIX V7 ではフォーマットが変更された: 2 文字目が getty(8) の引き数となり、(接続を) 試みる回線速度の順序を表すようになり ('0'は 300-1200-150-110 を繰り返すことを表し、'4'はオンラインコンソール DECwriter を表す)、行の残り (の文字) は端末名となった。よって、一般的な行は "14console"となる。

後者のシステムの書式は、より精巧である。 System V 系のシステムでは、代わりに /etc/inittab がある。

大昔の歴史 (2)

一方、現在ログインしている人をリストするファイル /etc/utmp がある。これは login(1) によって管理されている。このファイルは固定されたサイズであり、ファイル内の適切なインデックスは、 login(1) によって決定される。この際に ttyslot() が呼ばれて、 /etc/ttys における行番号を見つける (行番号は 1 から数える)。

ttyslot の意味

よって、関数 ttyslot() は、ファイル /etc/ttys における呼び出し元のプロセスの制御端末のインデックスを返す。これは /etc/utmp におけるカレントユーザのエントリのインデックスと (通常は) 等しい。 BSD には未だに /etc/ttys ファイルがあるが、System V 系のシステムにはないので、このファイルを参照することはできない。よって、そのようなシステムでは「 ttyslot() はカレントユーザのユーザアカウントデータベースにおけるインデックスを返す」とドキュメントに書かれている。

返り値

成功した場合、この関数はスロット番号を返す。エラーの場合 (例えば、ファイルディスクリプタ 0, 1, 2 の何れもデータベースにある端末に関連づけられていない場合)、 UNIX V6, V7, BSD 系のシステムは 0 を返すが、 System V 系のシステムは-1 を返す。

準拠

SUSv1。SUSv2 では「過去の名残 (LEGACY)」と位置付けられている。 POSIX.1-2001 で削除された。 SUSv2 ではエラー時に-1 を返すことが要求されている。

注意

utmp ファイルは様々なシステムで /etc/utmp, /var/adm/utmp, /var/run/utmp のようにいろいろな場所にある。

この関数の glibc2 における実装では、ファイル _PATH_TTYS を読み込む。これは <ttyent.h> において "/etc/ttys"と定義されている。エラーの場合、0 を返す。 Linux システムには通常 "/etc/ttys"がないので、常に 0 を返す。

Minix には fttyslot( fd) もある。

関連項目

getttyent(3), ttyname(3), utmp(5)

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2010-09-20 GNU