.\" Copyright (c) 1991, 1992, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)tty.4 8.3 (Berkeley) 4/19/94 .\" %Id: tty.4,v 1.7 1997/02/22 13:24:48 peter Exp % .\" $FreeBSD$ .\" WORD: Carrier Detect (CD) キャリア検出 [tty.4] .\" WORD: Clear To Send (CTS) 送信可 [tty.4] .\" WORD: Data Set Ready (DSR) データセットレディ [tty.4] .\" WORD: Data Terminal Ready (DTR) データ端末レディ [tty.4] .\" WORD: Line Enable (LE) 回線利用可能 [tty.4] .\" WORD: Request To Send (RTS) 送信要求 [tty.4] .\" WORD: Ring Indication (RI) 被呼表示 [tty.4] .\" WORD: Secondary Receive (SR) 従局受信 [tty.4] .\" WORD: Secondary Transmit (ST) 従局送信 [tty.4] .\" WORD: ioctl request ioctl リクエスト [tty.4] .\" WORD: kernel console カーネルコンソール .\" WORD: kernel message カーネルメッセージ .\" WORD: line discipline 回線制御規則 [tty.4] .\" WORD: out-calling modem 発信モデム .\" WORD: pty 疑似端末 .\" WORD: terminal semantics 端末セマンティクス [tty.4] .\" WORD: terminal special file 端末型特殊ファイル .\" WORD: termios state termios 状態 [tty.4] .\" " .Dd August 14, 1992 .Dt TTY 4 .Os BSD 4 .Sh 名称 .Nm tty .Nd 一般的な端末へのインタフェース .Sh 書式 .Fd #include .Sh 解説 本セクションではシステムの端末ドライバへのインタフェースを解説します。 .Ss 端末型特殊ファイル システム上の各ハードウェア端末ポートは、通常 ディレクトリ ``/dev/'' 内にある端末型特殊デバイスファイル (例えば ``/dev/tty03'' など) に関連付けられます。 ユーザがこうしたハードウェア端末ポートからシステムにログインしたときには、 システムはすでに関連するデバイスをオープンしており、 通常の対話的利用のために回線を準備しています ( .Xr getty 8 を参照)。 一方、ハードウェア端末ポートにではなく、 別のプログラムに接続する特別な端末型ファイルもあります。 そういった特別な端末デバイスは .Em 疑似端末 (pty) と呼ばれ、ネットワーク越しに (例えば .Xr rlogin 1 や .Xr telnet 1 を利用して) ログインする際に、 ログイン先のシステムに対して同様の インタフェースをユーザに与えるのに必要な機構を提供します。 そのような場合にも、 端末型ファイルがどのようにオープンされ準備されたかといった細かな ことは、 システム内部の特別なソフトウェアがすでに処理してくれています。 こういった具合に、ユーザは通常 どのようにこれらの回線をオープンし利用するかといった細かなことに 気を回す必要はありません。 また、これらの回線は (発信モデムを通して) システムのダイヤルアウトにもよく使われますが、 その場合にも、こうした端末型特殊ファイルへのアクセスの詳細を 隠してくれるプログラムをシステムが提供します ( .Xr tip 1 参照)。 .Pp ユーザが対話的にログインしたとき、システムはその回線をある様式 ( .Em 回線制御規則 (line discipline) と呼ばれます) に従う動作をするように準備します。 回線制御規則の詳細は、コマンドレベルでは .Xr stty 1 に、プログラミングレベルでは .Xr termios 4 に解説がされています。 ユーザは独自のログイン端末に関する設定を変更しようと思うかもしれません。 そんなときは、先に挙げたほうのマニュアルページを 参照してよくある事例を調べるとよいでしょう。 本マニュアルページの残りでは、端末デバイスを低レベルで使用したり 制御したりする際の詳細について解説します。おそらく、 システムの提供する機能と似たものを提供しようとするプログラムでは 必要なことでしょう。 .Ss 回線制御規則 端末型ファイルは、 標準システムコールを用いてオープン、読み込み、書き込みができるという 点でシステム中の他のファイルと同じように使用されます。 存在する端末型ファイルそれぞれにつき、 .Em 回線制御規則 と呼ばれるソフトウェア処理モジュールが関連付けられます。 .Em 回線制御規則 は、本質的には、低レベルのデバイスドライバのコードと 高レベルの一般インタフェースルーチン ( .Xr read 2 や .Xr write 2 など) を結びつけ、 そのデバイスについてのセマンティクスを実装する役目を持ちます。 最初に端末型ファイルがプログラムからオープンされると、 .Dv termios 回線制御規則と呼ばれるデフォルトの .Em 回線制御規則 がそのファイルに関連付けられます。 これはほとんどの場合で利用される主要な回線制御規則であり、 通常、ユーザが端末に関連付けるようなセマンティクスを提供します。 .Dv termios 回線制御規則が有効になると、端末型ファイルは .Xr termios 4 で記述されている規則に従って動作し、操作されます。 端末セマンティクスの完全な解説については termios マニュアルページを参照してください。 このマニュアルページで解説されている操作は、 一般にすべての .Em 回線制御規則 に対して共通な機能を表しています。 しかし、これらの中には .Dv termios 以外の回線制御規則と一緒に使用しても意味の無い呼び出しや、 ハードウェアでサポートされていない (または、疑似端末の場合のように、ハードウェア自体を持たないため使用できない) ものもあります。 .Ss 端末型ファイルの操作 次に挙げる操作はすべて システムコール .Xr ioctl 2 を使って呼び出されます。 パラメータ .Em request と .Em argp の説明については ioctl マニュアルページを参照してください。 ここに定義されている ioctl .Em リクエスト に加え、有効となった回線制御規則によっては特有の .Em リクエスト を他に定義していることもあります (実際は、 .Xr termios 4 はそれらを ioctl .Em リクエスト ではなく関数呼び出しとして定義しています)。 次のセクションでは利用可能な ioctl リクエストを列挙します。 リクエスト名、その利用目的の説明、そして (パラメータを取る場合は) 型を示した .Em argp パラメータを記します。 例えば、最初の項目では .Pp .D1 Em "TIOCSETD int *ldisc" .Pp という記述があります。これは、 次のような部分コードを用いて ファイル記述子 0 に関連付けられた端末上で呼び出されるでしょう。 .Bd -literal int ldisc; ldisc = TTYDISC; ioctl(0, TIOCSETD, &ldisc); .Ed .Ss 端末型ファイル用リクエストの解説 .Bl -tag -width TIOCGWINSZ .It Dv TIOCSETD Fa int *ldisc .Fa ldisc が指す新しい回線規則に変更します。 利用可能な回線制御規則は .Pa Aq sys/ttycom.h に列挙されています。現在は次のものが利用可能です: .Pp .Bl -tag -width TIOCGWINSZ -compact .It TTYDISC termios 対話的回線制御規則 .It TABLDISC タブレット回線制御規則 .It SLIPDISC シリアル IP 回線制御規則 .It PPPDISC PPP 回線制御規則 .El .Pp .It Dv TIOCGETD Fa int *ldisc .Fa ldisc の指す整数に現在の回線制御規則を返します。 .It Dv TIOCSBRK Fa void 端末ハードウェアをブレーク (BREAK) 条件に設定します。 .It Dv TIOCCBRK Fa void 端末ハードウェアのブレーク条件をクリアします。 .It Dv TIOCSDTR Fa void データ端末レディ (DTR) を有効にします。 .It Dv TIOCCDTR Fa void データ端末レディ (DTR) をクリアします。 .It Dv TIOCGPGRP Fa int *tpgrp 端末が関連付けられている現在のプロセスグループを .Fa tpgrp の指す整数に返します。これは .Xr termios 4 の .Fn tcgetattr 呼び出しを実装している下位の呼び出しです。 .It Dv TIOCSPGRP Fa int *tpgrp .Fa tpgrp の指すプロセスグループ (整数) に端末を関連付けます。 これは .Xr termios 4 の .Fn tcsetattr 呼び出しを実装している下位の呼び出しです。 .It Dv TIOCGETA Fa struct termios *term デバイスが関連付けられている現在の termios 状態を .Fa term の指す termios 構造体に代入します。 これは .Xr termios 4 の .Fn tcgetattr 呼び出しを実装している下位の呼び出しです。 .It Dv TIOCSETA Fa struct termios *term デバイスに関連付けられている termios 状態を即座に設定します。 これは .Xr termios 4 の .Fn tcsetattr に .Dv TCSANOW オプションを渡した場合の呼び出しを実装している下位の呼び出しです。 .It Dv TIOCSETAW Fa struct termios *term まず出力がすべて完了するのを待ち、それからデバイスに関連付けられた termios 状態を設定します。 これは .Xr termios 4 の .Fn tcsetattr に .Dv TCSADRAIN オプションを渡した場合の呼び出しを実装している下位の呼び出しです。 .It Dv TIOCSETAF Fa struct termios *term まず出力がすべて完了するのを待ち、保留されている入力をクリアし、 それからデバイスに関連付けられた termios 状態を設定します。 これは .Xr termios 4 の .Fn tcsetattr に .Dv TCSAFLUSH オプションを渡した場合の呼び出しを実装している下位の呼び出しです。 .It Dv TIOCOUTQ Fa int *num 現在の出力キューにある文字数を .Fa num の指す整数に代入します。 .It Dv TIOCSTI Fa char *cp タイピング入力をシミュレートします。端末が .Fa cp の指す文字入力を受けたかのように見せかけます。 .It Dv TIOCNOTTY Fa void この呼び出しは時代遅れですが、互換性のために残されています。 以前は、制御端末 ( .Xr termios 4 の .Em 端末制御 セクションを参照) を持たないプロセスが最初に端末デバイスをオープンしたとき、 その端末をプロセスの制御端末として利用できました。 プログラムによっては最初は制御端末を必要としない場合もあるので、 これは危険なことでした。 そこでこの呼び出しは、プロセスから制御端末を切り離す機能を提供していたのです。 ファイル .Pa /dev/tty をオープンし、そのファイル記述子で .Dv TIOCNOTTY を呼び出さなければ .Em なりません。 .Pp 現在のシステムでは、 .Fn open 呼び出しにおいてプロセスに制御端末を割り当てるようなことはしません。 端末を制御端末にするための .Dv TIOSCTTY という特別な ioctl が存在します。 また、プログラム中で .Fn fork を行い .Fn setsid システムコールを呼び出して、プロセスを専用のセッションに置くこともできます。 そうするとプロセスを制御端末から切り離す効果があります。 プログラム中で制御端末を取り除くには、こちらが新しく、望ましい方法です。 .It Dv TIOCSTOP Fa void (キーボードから ^S を入力するように) 端末の出力を止めます。 .It Dv TIOCSTART Fa void (キーボードから ^Q を入力するように) 端末の出力を開始します。 .It Dv TIOCSCTTY Fa void 端末をプロセスの制御端末にします (このときプロセスは制御端末を持っていてはいけません)。 .It Dv TIOCDRAIN Fa void すべての出力が終わるまで待ちます。 .It Dv TIOCEXCL Fa void 端末を専有使用するよう設定します。 以後、root 以外がこの端末をオープンすることはできません。 もちろん、root によって実行された (あるいは setuid された) プログラムは この専有設定には従いません。 これによって、この機能の有用性が制限されることになります。 .It Dv TIOCNXCL Fa void 端末の専有使用を取り消します。 以後、この端末をオープンできるようになります。 .It Dv TIOCFLUSH Fa int *what .Fa what の指す整数値が .Pa Aq sys/file.h に定義されている .Dv FREAD ビットを含むなら、 入力キューにある文字はすべて消去されます。 .Dv FWRITE ビットを含むなら、 出力キューにある文字はすべて消去されます。 整数値が 0 なら、 .Dv FREAD ビットと .Dv FWRITE ビットの両方がセットされているかのように動作します (つまり両方のキューをクリアします)。 .It Dv TIOCGWINSZ Fa struct winsize *ws 端末に関連付けられたウィンドウのサイズ情報を .Fa ws の指す .Va winsize 構造体に代入します。 ウィンドウサイズの構造体は、端末に接続されたデバイスの行数と桁数 (適切な場合にはピクセル数も) を保持します。 これはユーザソフトウェアによって設定され、 全画面指向のプログラムのほとんどがこの方法で画面サイズを決定します。 .Va winsize 構造体は .Pa Aq sys/ioctl.h に定義されています。 .It Dv TIOCSWINSZ Fa struct winsize *ws 端末に関連付けられたウィンドウのサイズを .Fa ws の指す .Va winsize 構造体 (上記参照) 中の値に設定します。 .It Dv TIOCCONS Fa int *on .Fa on が 0 以外の整数を指していれば、 カーネルコンソールの出力 (カーネルの printf 先) をこの端末にリダイレクトします。 .Fa on が整数 0 を指していれば、 カーネルコンソールの出力を通常のコンソールに戻します。 これは普通、ワークステーション上でカーネルメッセージを 特定のウィンドウにリダイレクトするのに使われます。 .It Dv TIOCMSET Fa int *state .Fa state の指す整数は、モデムの状態に対応するビットを含みます。 次のリストは定義済み変数とそれが表すモデムの状態です: .Pp .Bl -tag -width TIOCMXCTS -compact .It TIOCM_LE 回線利用可能 (Line Enable) .It TIOCM_DTR データ端末レディ (Data Terminal Ready) .It TIOCM_RTS 送信要求 (Request To Send) .It TIOCM_ST 従局送信 (Secondary Transmit) .It TIOCM_SR 従局受信 (Secondary Receive) .It TIOCM_CTS 送信可 (Clear To Send) .It TIOCM_CAR キャリア検出 (Carrier Detect) .It TIOCM_CD キャリア検出 (別称) .It TIOCM_RNG 被呼表示 (Ring Indication) .It TIOCM_RI 被呼表示 (別称) .It TIOCM_DSR データセットレディ (Data Set Ready) .El .Pp この呼び出しは、端末モデムを .Fa state の表す状態に設定します。 すべての端末がこの呼び出しをサポートしているとは限りません。 .It Dv TIOCMGET Fa int *state 上記のような端末モデム回線の現在の状態を .Fa state の指す整数に返します。 .It Dv TIOCMBIS Fa int *state .Fa state の指す整数が含むビットは、上記のようなモデムの状態を表しますが、 現在の状態との OR (和) が設定されます。 .It Dv TIOCMBIC Fa int *state .Fa state の指す整数が含むビットは、上記のようなモデムの状態を表しますが、 .Fa state 中でオンになっている各ビットを端末中でクリアします。 .El .Sh 関連項目 .Xr stty 1 , .Xr ioctl 2 , .Xr pty 4 , .Xr termios 4 , .Xr getty 8