TTY(4) FreeBSD カーネルインタフェースマニュアル TTY(4)
名称
tty − 一般的な端末へのインタフェース |
書式
#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 パラメータを記します。例えば、最初の項目では |
TIOCSETD int *ldisc |
という記述があります。これは、次のような部分コードを用いてファイル記述子 0 に関連付けられた端末上で呼び出されるでしょう。 |
int ldisc; |
||
ldisc = TTYDISC; |
||
ioctl(0, TIOCSETD, &ldisc); |
端末型ファイル用リクエストの解説 |
TIOCSETD int *ldisc
ldisc が指す新しい回線規則に変更します。利用可能な回線制御規 則は ~ 〈sys/ttycom.h〉 に列挙されています。現在は次のものが利 用可能です: TTYDISC TIOCGETD int *ldisc TIOCSBRK void TIOCCBRK void TIOCSDTR void TIOCCDTR void TIOCGPGRP int *tpgrp TIOCSPGRP int *tpgrp TIOCGETA struct termios *term TIOCSETA struct termios *term TIOCSETAW struct termios *term TIOCSETAF struct termios *term TIOCOUTQ int *num TIOCSTI char *cp TIOCNOTTY void 現在のシステムでは、 open() 呼び出しにおいてプロセスに制御端 末を割り当てるようなことはしません。端末を制御端末にするため の TIOSCTTY という特別な ioctl が存在します。また、プログラム 中で fork() を行い setsid() システムコールを呼び出して、プロ セスを専用のセッションに置くこともできます。そうするとプロセ スを制御端末から切り離す効果があります。プログラム中で制御端 末を取り除くには、こちらが新しく、望ましい方法です。 TIOCSTOP void TIOCSTART void TIOCSCTTY void TIOCDRAIN void TIOCEXCL void TIOCNXCL void TIOCFLUSH int *what TIOCGWINSZ struct winsize *ws TIOCSWINSZ struct winsize *ws TIOCCONS int *on TIOCMSET int *state TIOCM_LE この呼び出しは、端末モデムを state の表す状態に設定します。す べての端末がこの呼び出しをサポートしているとは限りません。 TIOCMGET int *state TIOCMBIS int *state TIOCMBIC int *state 関連項目 |
stty(1), ioctl(2), pty(4), termios(4), getty(8) 4th Berkeley Distribution August 14, 1992 4th Berkeley Distribution |