plucky (3) ttyslot.3.gz

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

名前

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

書式

       #include <unistd.h> /* 「注意」を参照 */

       int ttyslot(void);

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

       ttyslot():
           glibc 2.24 以降:
               _DEFAULT_SOURCE
           glibc 2.20 から 2.23 まで:
               _DEFAULT_SOURCE ||
               _XOPEN_SOURCE && _XOPEN_SOURCE < 500
           Glibc 2.19 以前:
               _BSD_SOURCE ||
               _XOPEN_SOURCE && _XOPEN_SOURCE < 500

説明

       レガシーな関数   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 を返す。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌─────────────────┬───────────────┬───────────┐
       │インターフェース属性        │
       ├─────────────────┼───────────────┼───────────┤
       │ttyslot()        │ Thread safety │ MT-Unsafe │
       └─────────────────┴───────────────┴───────────┘

準拠

       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 を返す。

       On BSD-like systems and Linux, the declaration of ttyslot()  is provided by <unistd.h>.  On System V-like
       systems,  the  declaration  is  provided  by  <stdlib.h>.  Since glibc 2.24, <stdlib.h> also provides the
       declaration with the following feature test macro definitions:

           (_XOPEN_SOURCE >= 500 ||
                   (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED))
               && ! (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)

       Minix には fttyslot(fd)  もある。

関連項目

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

この文書について

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