TCSETATTR(3) | FreeBSD Library Functions Manual | TCSETATTR(3) |
名称
cfgetispeed, cfsetispeed, cfgetospeed, cfsetospeed, cfsetspeed, cfmakeraw, cfmakesane, tcgetattr, tcsetattr — termios 構造体の操作ライブラリ
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 引数に関連するファイルが、端末ではありません。
規格
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 |