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/ に書かれている。
関連キーワード
SOURCE,
ttyslot,
XOPEN,
utmp,
TTYSLOT,
ttys,
文字,
端末,
歴史,
インデックス
Linux マニュアル 一覧
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]
Index
- 名前
- 書式
- 説明
-
- 大昔の歴史
- 大昔の歴史 (2)
- ttyslot の意味
- 返り値
- 属性
- 準拠
- 注意
- 関連項目
- この文書について
This document was created by man2html, using the manual pages.
Time: 12:08:37 GMT, June 11, 2022