TTYSLOT

Section: Linux Programmer's Manual (3)
Updated: 2007-07-26
Index JM Home Page roff page
 

名前

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

書式

#include <unistd.h> /* BSD 系のシステムと Linux の場合 */
#include <stdlib.h> /* System V 系のシステムの場合 */

int ttyslot(void);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

ttyslot(): _BSD_SOURCE || (_XOPEN_SOURCE_EXTENDED && ! _XOPEN_SOURCE >= 500)  

説明

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

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

大昔の歴史

Unix V6 では /etc/ttys ファイルが使われていた。 init(8) プログラムは、このファイルを読み込み、 各端末行で何をすべきかを探す。 各行は 3 文字から構成されている。 1 文字目は '0' または '1' であり、 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(8) によって管理されている。 このファイルは固定されたサイズであり、ファイル内の適切なインデックスは、 login(8) によって決定される。 この際に 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)


 

Index

名前
書式
説明
大昔の歴史
大昔の歴史 (2)
ttyslot の意味
返り値
準拠
注意
関連項目

This document was created by man2html, using the manual pages.
Time: 04:32:09 GMT, November 19, 2007