TTY
Section: Devices and Network Interfaces (4)
索引
jman
BSD mandoc
BSD 4
索引
名称
tty
- 一般的な端末へのインタフェース
索引
書式
Fd #include <sys/ioctl.h>
索引
解説
本セクションではシステムの端末ドライバへのインタフェースを解説します。
端末型特殊ファイル
システム上の各ハードウェア端末ポートは、通常
ディレクトリ ``/dev/'' 内にある端末型特殊デバイスファイル
(例えば ``/dev/tty03'' など) に関連付けられます。
ユーザがこうしたハードウェア端末ポートからシステムにログインしたときには、
システムはすでに関連するデバイスをオープンしており、
通常の対話的利用のために回線を準備しています (
getty(8)
を参照)。
一方、ハードウェア端末ポートにではなく、
別のプログラムに接続する特別な端末型ファイルもあります。
そういった特別な端末デバイスは
疑似端末 (pty)
と呼ばれ、ネットワーク越しに (例えば
rlogin(1)
や
telnet(1)
を利用して) ログインする際に、
ログイン先のシステムに対して同様の
インタフェースをユーザに与えるのに必要な機構を提供します。
そのような場合にも、
端末型ファイルがどのようにオープンされ準備されたかといった細かな
ことは、
システム内部の特別なソフトウェアがすでに処理してくれています。
こういった具合に、ユーザは通常
どのようにこれらの回線をオープンし利用するかといった細かなことに
気を回す必要はありません。
また、これらの回線は (発信モデムを通して)
システムのダイヤルアウトにもよく使われますが、
その場合にも、こうした端末型特殊ファイルへのアクセスの詳細を
隠してくれるプログラムをシステムが提供します (
tip(1)
参照)。
ユーザが対話的にログインしたとき、システムはその回線をある様式 (
回線制御規則 (line discipline)
と呼ばれます) に従う動作をするように準備します。
回線制御規則の詳細は、コマンドレベルでは
stty(1)
に、プログラミングレベルでは
termios(4)
に解説がされています。
ユーザは独自のログイン端末に関する設定を変更しようと思うかもしれません。
そんなときは、先に挙げたほうのマニュアルページを
参照してよくある事例を調べるとよいでしょう。
本マニュアルページの残りでは、端末デバイスを低レベルで使用したり
制御したりする際の詳細について解説します。おそらく、
システムの提供する機能と似たものを提供しようとするプログラムでは
必要なことでしょう。
回線制御規則
端末型ファイルは、
標準システムコールを用いてオープン、読み込み、書き込みができるという
点でシステム中の他のファイルと同じように使用されます。
存在する端末型ファイルそれぞれにつき、
回線制御規則
と呼ばれるソフトウェア処理モジュールが関連付けられます。
回線制御規則
は、本質的には、低レベルのデバイスドライバのコードと
高レベルの一般インタフェースルーチン (
read(2)
や
write(2)
など) を結びつけ、
そのデバイスについてのセマンティクスを実装する役目を持ちます。
最初に端末型ファイルがプログラムからオープンされると、
termios
回線制御規則と呼ばれるデフォルトの
回線制御規則
がそのファイルに関連付けられます。
これはほとんどの場合で利用される主要な回線制御規則であり、
通常、ユーザが端末に関連付けるようなセマンティクスを提供します。
termios
回線制御規則が有効になると、端末型ファイルは
termios(4)
で記述されている規則に従って動作し、操作されます。
端末セマンティクスの完全な解説については
termios マニュアルページを参照してください。
このマニュアルページで解説されている操作は、
一般にすべての
回線制御規則
に対して共通な機能を表しています。
しかし、これらの中には
termios
以外の回線制御規則と一緒に使用しても意味の無い呼び出しや、
ハードウェアでサポートされていない
(または、疑似端末の場合のように、ハードウェア自体を持たないため使用できない)
ものもあります。
端末型ファイルの操作
次に挙げる操作はすべて
システムコール
ioctl(2)
を使って呼び出されます。
パラメータ
request
と
argp
の説明については ioctl マニュアルページを参照してください。
ここに定義されている ioctl
リクエスト
に加え、有効となった回線制御規則によっては特有の
リクエスト
を他に定義していることもあります (実際は、
termios(4)
はそれらを ioctl
リクエスト
ではなく関数呼び出しとして定義しています)。
次のセクションでは利用可能な ioctl リクエストを列挙します。
リクエスト名、その利用目的の説明、そして (パラメータを取る場合は) 型を示した
argp
パラメータを記します。
例えば、最初の項目では
という記述があります。これは、
次のような部分コードを用いて
ファイル記述子 0 に関連付けられた端末上で呼び出されるでしょう。
int ldisc;
ldisc = TTYDISC;
ioctl(0, TIOCSETD, &ldisc);
端末型ファイル用リクエストの解説
- TIOCSETD Fa int *ldisc
-
Fa ldisc
が指す新しい回線規則に変更します。
利用可能な回線制御規則は
Aq sys/ttycom.h
に列挙されています。現在は次のものが利用可能です:
- TTYDISC
-
termios 対話的回線制御規則
- TABLDISC
-
タブレット回線制御規則
- SLIPDISC
-
シリアル IP 回線制御規則
- PPPDISC
-
PPP 回線制御規則
- TIOCGETD Fa int *ldisc
-
Fa ldisc
の指す整数に現在の回線制御規則を返します。
- TIOCSBRK Fa void
-
端末ハードウェアをブレーク (BREAK) 条件に設定します。
- TIOCCBRK Fa void
-
端末ハードウェアのブレーク条件をクリアします。
- TIOCSDTR Fa void
-
データ端末レディ (DTR) を有効にします。
- TIOCCDTR Fa void
-
データ端末レディ (DTR) をクリアします。
- TIOCGPGRP Fa int *tpgrp
-
端末が関連付けられている現在のプロセスグループを
Fa tpgrp
の指す整数に返します。これは
termios(4)
の
Fn tcgetattr
呼び出しを実装している下位の呼び出しです。
- TIOCSPGRP Fa int *tpgrp
-
Fa tpgrp
の指すプロセスグループ (整数) に端末を関連付けます。
これは
termios(4)
の
Fn tcsetattr
呼び出しを実装している下位の呼び出しです。
- TIOCGETA Fa struct termios *term
-
デバイスが関連付けられている現在の termios 状態を
Fa term
の指す termios 構造体に代入します。
これは
termios(4)
の
Fn tcgetattr
呼び出しを実装している下位の呼び出しです。
- TIOCSETA Fa struct termios *term
-
デバイスに関連付けられている termios 状態を即座に設定します。
これは
termios(4)
の
Fn tcsetattr
に
TCSANOW
オプションを渡した場合の呼び出しを実装している下位の呼び出しです。
- TIOCSETAW Fa struct termios *term
-
まず出力がすべて完了するのを待ち、それからデバイスに関連付けられた
termios 状態を設定します。
これは
termios(4)
の
Fn tcsetattr
に
TCSADRAIN
オプションを渡した場合の呼び出しを実装している下位の呼び出しです。
- TIOCSETAF Fa struct termios *term
-
まず出力がすべて完了するのを待ち、保留されている入力をクリアし、
それからデバイスに関連付けられた termios 状態を設定します。
これは
termios(4)
の
Fn tcsetattr
に
TCSAFLUSH
オプションを渡した場合の呼び出しを実装している下位の呼び出しです。
- TIOCOUTQ Fa int *num
-
現在の出力キューにある文字数を
Fa num
の指す整数に代入します。
- TIOCSTI Fa char *cp
-
タイピング入力をシミュレートします。端末が
Fa cp
の指す文字入力を受けたかのように見せかけます。
- TIOCNOTTY Fa void
-
この呼び出しは時代遅れですが、互換性のために残されています。
以前は、制御端末 (
termios(4)
の
端末制御
セクションを参照) を持たないプロセスが最初に端末デバイスをオープンしたとき、
その端末をプロセスの制御端末として利用できました。
プログラムによっては最初は制御端末を必要としない場合もあるので、
これは危険なことでした。
そこでこの呼び出しは、プロセスから制御端末を切り離す機能を提供していたのです。
ファイル
/dev/tty
をオープンし、そのファイル記述子で
TIOCNOTTY
を呼び出さなければ
なりません。
現在のシステムでは、
Fn open
呼び出しにおいてプロセスに制御端末を割り当てるようなことはしません。
端末を制御端末にするための
TIOSCTTY
という特別な ioctl が存在します。
また、プログラム中で
Fn fork
を行い
Fn setsid
システムコールを呼び出して、プロセスを専用のセッションに置くこともできます。
そうするとプロセスを制御端末から切り離す効果があります。
プログラム中で制御端末を取り除くには、こちらが新しく、望ましい方法です。
- TIOCSTOP Fa void
-
(キーボードから ^S を入力するように) 端末の出力を止めます。
- TIOCSTART Fa void
-
(キーボードから ^Q を入力するように) 端末の出力を開始します。
- TIOCSCTTY Fa void
-
端末をプロセスの制御端末にします
(このときプロセスは制御端末を持っていてはいけません)。
- TIOCDRAIN Fa void
-
すべての出力が終わるまで待ちます。
- TIOCEXCL Fa void
-
端末を専有使用するよう設定します。
以後、root 以外がこの端末をオープンすることはできません。
もちろん、root によって実行された (あるいは setuid された) プログラムは
この専有設定には従いません。
これによって、この機能の有用性が制限されることになります。
- TIOCNXCL Fa void
-
端末の専有使用を取り消します。
以後、この端末をオープンできるようになります。
- TIOCFLUSH Fa int *what
-
Fa what
の指す整数値が
Aq sys/file.h
に定義されている
FREAD
ビットを含むなら、
入力キューにある文字はすべて消去されます。
FWRITE
ビットを含むなら、
出力キューにある文字はすべて消去されます。
整数値が 0 なら、
FREAD
ビットと
FWRITE
ビットの両方がセットされているかのように動作します
(つまり両方のキューをクリアします)。
- TIOCGWINSZ Fa struct winsize *ws
-
端末に関連付けられたウィンドウのサイズ情報を
Fa ws
の指す
winsize
構造体に代入します。
ウィンドウサイズの構造体は、端末に接続されたデバイスの行数と桁数
(適切な場合にはピクセル数も) を保持します。
これはユーザソフトウェアによって設定され、
全画面指向のプログラムのほとんどがこの方法で画面サイズを決定します。
winsize
構造体は
Aq sys/ioctl.h
に定義されています。
- TIOCSWINSZ Fa struct winsize *ws
-
端末に関連付けられたウィンドウのサイズを
Fa ws
の指す
winsize
構造体 (上記参照) 中の値に設定します。
- TIOCCONS Fa int *on
-
Fa on
が 0 以外の整数を指していれば、
カーネルコンソールの出力 (カーネルの printf 先)
をこの端末にリダイレクトします。
Fa on
が整数 0 を指していれば、
カーネルコンソールの出力を通常のコンソールに戻します。
これは普通、ワークステーション上でカーネルメッセージを
特定のウィンドウにリダイレクトするのに使われます。
- TIOCMSET Fa int *state
-
Fa state
の指す整数は、モデムの状態に対応するビットを含みます。
次のリストは定義済み変数とそれが表すモデムの状態です:
- TIOCM_LE
-
回線利用可能 (Line Enable)
- TIOCM_DTR
-
データ端末レディ (Data Terminal Ready)
- TIOCM_RTS
-
送信要求 (Request To Send)
- TIOCM_ST
-
従局送信 (Secondary Transmit)
- TIOCM_SR
-
従局受信 (Secondary Receive)
- TIOCM_CTS
-
送信可 (Clear To Send)
- TIOCM_CAR
-
キャリア検出 (Carrier Detect)
- TIOCM_CD
-
キャリア検出 (別称)
- TIOCM_RNG
-
被呼表示 (Ring Indication)
- TIOCM_RI
-
被呼表示 (別称)
- TIOCM_DSR
-
データセットレディ (Data Set Ready)
この呼び出しは、端末モデムを
Fa state
の表す状態に設定します。
すべての端末がこの呼び出しをサポートしているとは限りません。
- TIOCMGET Fa int *state
-
上記のような端末モデム回線の現在の状態を
Fa state
の指す整数に返します。
- TIOCMBIS Fa int *state
-
Fa state
の指す整数が含むビットは、上記のようなモデムの状態を表しますが、
現在の状態との OR (和) が設定されます。
- TIOCMBIC Fa int *state
-
Fa state
の指す整数が含むビットは、上記のようなモデムの状態を表しますが、
Fa state
中でオンになっている各ビットを端末中でクリアします。
索引
関連項目
stty(1),
ioctl(2),
pty(4),
termios(4),
getty(8)
索引
Index
- 名称
-
- 書式
-
- 解説
-
- 端末型特殊ファイル
-
- 回線制御規則
-
- 端末型ファイルの操作
-
- 端末型ファイル用リクエストの解説
-
- 関連項目
-
Time: 07:07:25 GMT, January 12, 2009