TTY(4) | FreeBSD Kernel Interfaces Manual | TTY(4) |
名称
tty — 一般的な端末のインタフェース書式
#include < sys/ioctl.h>解説
このセクションは、システムの端末ドライバのインタフェースについて説明しています。端末特殊ファイル
システムの各ハードウェア端末ポートは、通常、ディレクトリ ``/dev/'' に関連付けられた端末特殊デバイスファイル (例えば、``/dev/tty03'') があります。ユーザが、これらのハードウェア端末ポートの 1 つでシステムにログインするとき、システムは、既に関連するデバイスをオープンして、通常の対話的な使用のために回線を準備しています ( getty(8) を参照)。また、ハードウェア端末ポートに接続するのではなく、反対側の別のプログラムに接続する端末ファイルのような特別な場合があります。これらの特殊端末デバイスは、 疑似端末 (pty) と呼ばれ、(例えば rlogin(1) または telnet(1) を使用して) ネットワーク越しにログインするとき、システムに同じインタフェースをユーザに与えるのに必要なメカニズムを提供しています。そのような場合でも、端末ファイルがどのようにオープンされてセットアップされたかについての詳細は、システムの特別なソフトウェアによって既に処理されています。したがって、ユーザは、通常、これらの回線がどのようにオープンされ、使用されるかの詳細に関して心配する必要はありません。また、これらの回線は、(発信モデムを通して) システムからのダイヤルするためにしばしば使用されますが、一方、システムは、これらの端末特殊ファイルにアクセスする詳細を隠すプログラムを提供しています ( tip(1) を参照)。対話的なユーザがログインするとき、システムは、コマンドレベルで、 stty(1) に記述され、プログラミングレベルで、 termios(4) に記述されている特別な詳細である、 ( 回線制御規則 (line discipline) と呼ばれる) 特殊な方法で振る舞う回線を準備しています。ユーザは、特定のログイン端末に関連付けられている設定を変更するのに関心があるなら、よくある例として、前述のマニュアルページを参照するべきです。このマニュアルページの残りは、おそらくシステムによって提供されたものと同様の機能を提供したいプログラムによって必要とされるような、低レベルで端末デバイスを使用して制御する詳細について説明することに関係しています。
端末ファイル操作
つぎのすべての操作は、 ioctl(2) システムコールを使用して呼び出されます。 要求 と argp パラメータの説明については、そのマニュアルページを参照してください。ここで定義された ioctl 要求 に加えて、有効な特定の回線制御規則は、それに特有の他の 要求 を定義しています (実際に、 termios(4) は、ioctl 要求 ではなく、関数呼び出しとして、それらを定義しています)。次のセクションは、利用可能な ioctl 要求をリストしています。要求の名前、目的の説明、と (もしあるなら) タイプされた argp パラメータがリストされます。例えば、最初のエントリ
TIOCSPGRP int *tpgrp
は、次のコードの断片によってファイル記述子 0 に関連付けされた端末で呼び出されます:
int pgrp; pgrp = getpgrp(); ioctl(0, TIOCSPGRP, &pgrp);
端末ファイル要求の解説
- TIOCSETD int *ldisc
- この呼び出しは、時代遅れであり、互換性のために残されています。 FreeBSD 8.0 の前に、 ldisc によって指された新しい回線制御規則に変更されるでしょう。
- TIOCGETD int *ldisc
- ldisc によって指される整数に現在の回線制御規則を返します。
- TIOCSBRK void
- 端末のハードウェアを BREAK 状態に設定します。
- TIOCCBRK void
- 端末のハードウェアの BREAK 状態をクリアします。
- TIOCSDTR void
- データ端末レディ (DTR) をアサート (有効な状態に) します。
- TIOCCDTR void
- データ端末レディ (DTR) をクリアします。
- TIOCGPGRP int *tpgrp
- tpgrp によって指される整数に端末が関連付けられている現在のプロセスグループを返します。これは、 termios(4) の tcgetattr() 呼び出しを実装する基本的な呼び出しです。
- TIOCSPGRP int *tpgrp
- tpgrp によって指される (整数として) プロセスグループに端末を関連付けます。これは、 termios(4) の tcsetattr() 呼び出しを実装する基本的な呼び出しです。
- TIOCGETA struct termios *term
- term によって指される termios 構造体に、デバイスに関連付けられている termios 状態の現在の値を置きます。これは、 termios(4) の tcgetattr() 呼び出しを実装する基本的な呼び出しです。
- TIOCSETA struct termios *term
- デバイスに関連付けられている termios 状態を直ちに設定します。これは、 TCSANOW オプションで termios(4) の tcsetattr() 呼び出しを実装する基本的な呼び出しです。
- TIOCSETAW struct termios *term
- 最初に、あらゆる出力が完了するのを待ち、次に、デバイスに関連付けられている termios 状態を設定します。これは、 TCSADRAIN オプションで termios(4) の tcsetattr() 呼び出しを実装する基本的な呼び出しです。
- TIOCSETAF struct termios *term
- 最初に、あらゆる出力が完了するのを待ち、あらゆる保留中の入力をクリアし、次に、デバイスに関連付けられている termios 状態を設定します。これは、 TCSAFLUSH オプションで termios(4) の tcsetattr() 呼び出しを実装する基本的な呼び出しです。
- TIOCOUTQ int *num
- num によって指される整数に出力キューの現在の文字数を置きます。
- TIOCSTI char *cp
- タイプされた入力をシミュレートします。まるで端末が cp によって指された文字を受け取るかのように見せかけます。
- TIOCNOTTY void
-
この呼び出しは、時代遅れであり、互換性のために残されています。昔は、制御端末 (
termios(4) の
制御端末 を参照) がないプロセスが、最初に端末デバイスをオープンしたとき、その制御端末として端末を獲得していました。いくつかのプログラムで、最初に制御端末を必要としなかったかのように、これは、危険で、呼び出しプロセスから制御端末を分離するためのメカニズムを提供しています。ファイル
/dev/tty をオープンして、そのファイル記述子で
TIOCNOTTY を呼び出さなければ
なりません。
現在のシステムは、 open() 呼び出しでプロセスに制御端末を割り付けません: 端末を制御端末にするための TIOCSCTTY を呼び出す特有の ioctl があります。さらに、プログラムは、 fork() することができ、制御端末からそれを分離する効果がある - それ自身のセッションにプロセスを置く setsid() システムコールを呼び出すことができます。これは、それらの制御端末を引き離すプログラムのための新しく好ましい方法です。
- TIOCSTOP void
- (キーボードで ^S をタイプするように) 端末で出力を停止します。
- TIOCSTART void
- (キーボードで ^Q をタイプするように) 端末で出力を開始します。
- TIOCSCTTY void
- プロセスのために端末を制御端末にします (プロセスは、その時点で制御端末があってはなりません)。
- TIOCDRAIN void
- すべての出力が空になるまで待ちます。
- TIOCEXCL void
- 端末で排他的な使用を設定します。 root を除いてさらなるオープンは、許可されません。当然、これは、root (または setuid) によって実行されるプログラムが、この機能の有用性を制限する - 排他的な設定に従わないことを意味します。
- TIOCNXCL void
- 端末で排他的な使用をクリアします。さらなるオープンは、許可されます。
- TIOCFLUSH int *what
- what によって指される int の値が < sys/file.h> で定義されるように FREAD ビットを含んでいるなら、入力キューのすべての文字は、クリアされます。 FWRITE ビットを含んでいるなら、出力キューのすべての文字は、クリアされます。整数の値が 0 であるなら、あたかも FREAD と FWRITE ビットの両方が設定されていたかのように振る舞います (すなわち、両方のキューをクリアします)。
- TIOCGWINSZ struct winsize *ws
- 端末に関連付けられたウィンドウのサイズ情報を ws によって指される winsize 構造体に置きます。ウィンドウサイズ構造体は、端末にアタッチされたデバイスの行とカラム (と、適切であるなら、ピクセル (画素)) の数を含んでいます。それは、ユーザのソフトウェアによって設定され、ほとんどの全画面指向のプログラムが画面サイズを決定する手段です。 winsize 構造体は、 < sys/ioctl.h> に定義されています。
- TIOCSWINSZ struct winsize *ws
- 端末に関連付けられたウィンドウのサイズを ws (上記参照) によって指される winsize 構造体の値に設定します。
- TIOCCONS int *on
- on が 0 でない整数を指すなら、カーネルコンソール出力 (カーネルの printf) をこの端末にリダイレクト (出力先変更) します。 on が 0 の整数を指すなら、カーネルコンソール出力を通常のコンソールにリダイレクト (出力先変更) します。これは、通常、ワークステーションで特定のウィンドウにカーネルメッセージをリダイレクトするために使用されます。
- TIOCMSET int *state
-
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)。
この呼び出しは、端末のモデム状態を state によって表される状態に設定します。すべての端末が、これをサポートするわけではありません。
- TIOCMGET int *state
- 上記に表されるような端末のモデム回線の現在の状態を state によって指される整数に返します。
- TIOCMBIS int *state
- state によって指される整数中のビットは、上記に説明されるようにモデム状態を表していますが、state は、現在の状態と論理和 (OR) されます。
- TIOCMBIC int *state
- state によって指される整数中のビットは、上記に説明されるようにモデム状態を表していますが、 state 中の各ビットは、端末でクリアされます。
実装に関する注
すべての端末デバイスを通る入力と出力のバイトの合計数は、 kern.tk_nin と kern.tk_nout 読み込み専用の sysctl(8) 変数によって利用可能です。December 26, 2009 | FreeBSD |