Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all bug

名前

       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(1)   プログラムは、このファイルを読み
       込み、  各端末行で何をすべきかを探す。 各行は 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 を返す。

属性

   マルチスレッディング (pthreads(7) 参照)
       関数 ttyslot() はスレッドセーフではない関数 getttyent() を呼び出す。そのため、スレッドセー
       フではない。

準拠

       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.79 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。