EN JA
TCSETATTR(3)
TCSETATTR(3) FreeBSD Library Functions Manual TCSETATTR(3)

名称

cfgetispeed, cfsetispeed, cfgetospeed, cfsetospeed, cfsetspeed, cfmakeraw, cfmakesane, tcgetattr, tcsetattrtermios 構造体の操作

ライブラリ

Standard C Library (libc, -lc)

書式

#include < termios.h>

speed_t
cfgetispeed( const struct termios *t);

int
cfsetispeed( struct termios *t, speed_t speed);

speed_t
cfgetospeed( const struct termios *t);

int
cfsetospeed( struct termios *t, speed_t speed);

int
cfsetspeed( struct termios *t, speed_t speed);

void
cfmakeraw( struct termios *t);

void
cfmakesane( struct termios *t);

int
tcgetattr( int fd, struct termios *t);

int
tcsetattr( int fd, int action, const struct termios *t);

解説

cfmakeraw(), cfmakesane(), tcgetattr() と tcsetattr() 関数は、termios 構造体を取得するおよび設定するために提供されています。

cfgetispeed(), cfsetispeed(), cfgetospeed(), cfsetospeed() と cfsetspeed() 関数は、termios 構造体でボーレート (通信速度) 値を取得するおよび設定するために提供されています。次に記述されるような端末での関数の影響は、 tcsetattr() 関数が呼び出されるまでは有効にはならず、すべてエラーも検出されません。 termios 構造体に設定され、 tcsetattr() に渡されたボーレートのための特定の値は、特別の意味を持っています。これらは、 tcsetattr() 関数を説明しているマニュアルページの部分で明確にされます。

ボーレートの取得と設定

入力および出力のボーレートは、termios 構造体に入っています。符号なしの整数 speed_t は、インクルードファイル < termios.h> の中で typedef されています。しかしながら、整数の値は、表されているボーレートに直接対応しており、次のシンボル値が定義されます。

#define B0      0 
#define B50     50 
#define B75     75 
#define B110    110 
#define B134    134 
#define B150    150 
#define B200    200 
#define B300    300 
#define B600    600 
#define B1200   1200 
#define B1800   1800 
#define B2400   2400 
#define B4800   4800 
#define B9600   9600 
#define B19200  19200 
#define B38400  38400 
#ifndef _POSIX_SOURCE 
#define EXTA    19200 
#define EXTB    38400 
#endif  /*_POSIX_SOURCE */

cfgetispeed() 関数は、 tp で参照される termios 構造体の入力ボーレートを返します。

cfsetispeed() 関数は、 tp で参照される termios 構造体の入力ボーレートを speed に設定します。

cfgetospeed() 関数は、 tp で参照される termios 構造体の出力ボーレートを返します。

cfsetospeed() 関数は、 tp で参照される termios 構造体の出力ボーレートを speed に設定します。

cfsetspeed() 関数は、 tp で参照される termios 構造体の入力および出力ボーレートの両方を speed に設定します。

成功して終了すると、関数 cfsetispeed(), cfsetospeed() と cfsetspeed() は、値 0 を返します。そうでなければ -1 の値が返され、グローバル変数 errno にエラーを示す値が設定されます。

termios 状態の取得と設定

このセクションでは、一般的な端末インタフェースを制御するために使用される関数について説明します。特定のコマンドについて特に断りのない限り、これらの関数は、バックグラウンドプロセスによって使用を制限されます。これらの操作を実行する試みは、プロセスグループが SIGTTOU シグナルを送ることになるでしょう。呼び出しプロセスが SIGTTOU シグナルをブロックまたは無視した場合は、プロセスは、操作を実行することを許され、SIGTTOU シグナルは送られません。

すべての関数で、 fd は、オープンファイルの記述子ですが、関数は、特別のファイル記述子に関連したオープンファイル記述ではなく、根本的な端末ファイルに影響します。

cfmakeraw() 関数は、“生 (raw) の I/O パス”を与えて、termios 構造体に格納されたフラグをすべての入力および出力処理を無効にする状態に設定しますが、一方、 cfmakesane() 関数は、新たに作成された端末デバイスのものと同様の状態にそれらを設定します。この効果を逆転させる関数がないことに注意すべきです。これは、再度利用可能になり、関数 tcsetattr() を使って現在の端末状態をスナップショットするアプリケーションのための正確な方法のさまざまな処理オプションがあるからです。 tcgetattr() は、 cfmakeraw() または cfmakesane() と後に続く tcsetattr() で raw または sane モードを設定します。そして、前の端末状態に戻るために保存された状態で別の tcsetattr() を使います。

tcgetattr() 関数は、 tp で参照される termios 構造体に入っている fd によって参照される端末に関連するパラメータをコピーします。この関数は、バックグラウンド処理から許可されます。しかしながら、端末属性は、その後のフォアグラウンド処理によって変更されるかもしれません。

tcsetattr() 関数は、 tp によって参照される termios 構造体から端末に関連するパラメータを設定します。 action 引数は、インクルードファイル < termios.h> の中で指定されるように、次の値を論理和 ( or) することによって作成されます。

TCSANOW
変更は、直ちに生じます。
TCSADRAIN
変更は、 fd に書き込まれたすべての出力が端末に送信された後で生じます。出力に影響するパラメータを変更する場合は、この action 値を使うべきです。
TCSAFLUSH
変更は、 fd に書き込まれたすべての出力が端末に送信された後で生じます。さらに、受け取られたが読み込まれなかったどんな入力も廃棄されます。
TCSASOFT
この値が action 値に論理和 ( or) された場合は、 c_cflag, c_ispeed, c_ospeed フィールドの値は、無視されます。

0 のボーレートは、接続を終了するために使用されます。関数 tcsetattr() への出力速度として 0 を指定すると、モデム制御は、端末を切断し、端末で、もはやアサート (アクティブな状態にする) されないでしょう。

関数 tcsetattr() への入力速度として 0 が指定される場合は、入力ボーレートは、出力ボーレートで指定されたものと同じ値に設定されます。

tcsetattr() が要求された変更のいずれをも行うことができない場合は、-1 を返して errno を設定します。そうでなければ、要求された変更のすべてをできるだけ行います。指定された入力および出力のボーレートが異なり、サポートされない組合せがある場合は、どちらのボーレートも変更されません。

成功して終了すると、関数 tcgetattr() と tcsetattr() は、値 0 を返します。そうでなければ、-1 を返してグローバル変数 errno に次のようなエラーを示す値が設定されます。

[ EBADF]
tcgetattr() または tcsetattr() への fd 引数が有効なファイル記述子ではありません。
[ EINTR]
tcsetattr() 関数は、シグナルによって中断されました。
[ EINVAL]
tcsetattr() 関数への action 引数が有効でないか、または termios 構造体で表される属性をサポートされない値に変更しよう試みています。
[ ENOTTY]
tcgetattr() または tcsetattr() への fd 引数に関連するファイルが、端末ではありません。

関連項目

tcsendbreak(3), termios(4)

規格

cfgetispeed(), cfsetispeed(), cfgetospeed(), cfsetospeed(), tcgetattr(), tcsetattr() 関数は、 IEEE Std 1003.1-1988 (“POSIX.1”) 規格に適合する予定です。 cfmakeraw(), cfmakesane() と cfsetspeed() 関数は、 tcsetattr() 関数の TCSASOFT オプションと同様に IEEE Std 1003.1-1988 (“POSIX.1”) の拡張です。
January 2, 1994 FreeBSD