TTYSLOT

Section: Linux Programmer's Manual (3)
Updated: 2017-09-15
Index JM Home Page
 

名前

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/ に書かれている。

関連キーワード

端末   ttys   utmp   インデックス   カレント   System   接続   SUSv   declaration   ttyslot   スロット   unistd   エントリー   回線速度   順序   一般的   init   シグナル   再度   行番号   通常   データベース   systems   provided   stdlib

Linux マニュアル 一覧

関連するコマンド・関数

login.3   tty.1   lookbib.1   endttyent.3   getttyent.3   getttynam.3
 

Index

名前
書式
説明
大昔の歴史
大昔の歴史 (2)
ttyslot の意味
返り値
属性
準拠
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:10 GMT, October 11, 2026