\section{\module{termios} ---
         \POSIX{} スタイルの端末制御}

\declaremodule{builtin}{termios}
  \platform{Unix}
\modulesynopsis{\POSIX\ スタイルの端末制御。}

\indexii{\POSIX}{I/O control}
\indexii{tty}{I/O control}


このモジュールでは端末 I/O 制御のための \POSIX{} 準拠の関数呼び出し
インタフェースを提供します。これら呼び出しのための完全な記述については、
\POSIX{} または \UNIX{} マニュアルページを参照してください。
\POSIX{} \emph{termios} 形式の端末制御をサポートする \UNIX{} の
バージョンで (かつインストール時に指定した場合に) のみ利用可能です。

このモジュールの関数は全て、ファイル記述子 \var{fd} を最初の引数
としてとります。この値は、\code{sys.stdin.fileno()} が返すような
整数のファイル記述子でも、\code{sys.stdin} 自体のようなファイル
オブジェクトでもかまいません。

このモジュールではまた、モジュールで提供されている関数を使う上で
必要となる全ての定数を定義しています; これらの定数は C の対応
する関数と同じ名前を持っています。これらの端末制御インタフェース
を利用する上でのさらなる情報については、あなたのシステムの
ドキュメンテーションを参考にしてください。

このモジュールでは以下の関数を定義しています:

\begin{funcdesc}{tcgetattr}{fd}
ファイル記述子 \var{fd} の端末属性を含むリストを返します。その形式は:
\code{[}\var{iflag}, \var{oflag}, \var{cflag}, \var{lflag}, \var{ispeed}, 
\var{ospeed}, \var{cc}\code{]} です。\var{cc} は端末特殊文字のリストです
(それぞれ長さ 1 の文字列です。ただしインデクス \constant{VMIN} および 
\constant{VTIME} の内容は、それらのフィールドが定義されていた場合整数
の値となります)。

端末設定フラグおよび端末速度の解釈、および配列 \var{cc} のインデクス
検索は、\module{termios} で定義されているシンボル定数を使って行わなければ
なりません。
\end{funcdesc}

\begin{funcdesc}{tcsetattr}{fd, when, attributes}
ファイル記述子 \var{fd} の端末属性を \var{attributes} から取り出して
設定します。\var{attributes} は \function{tcgetattr()} が返すような
リストです。引数 \var{when} は属性がいつ変更されるかを決定します:
\constant{TCSANOW} は即時変更を行い、\constant{TCSAFLUSH} は現在
キューされている出力を全て転送し、全てのキューされている入力を無視
した後に変更を行います。
\end{funcdesc}

\begin{funcdesc}{tcsendbreak}{fd, duration}
ファイル記述子 \var{fd} にブレークを送信します。\var{duration} をゼロ
にすると、 0.25--0.5 秒間のブレークを送信します; \var{duration} の値が
ゼロでない場合、その意味はシステム依存です。
\end{funcdesc}

\begin{funcdesc}{tcdrain}{fd}
ファイル記述子 \var{fd} に書き込まれた全ての出力が転送されるまで
待ちます。
\end{funcdesc}

\begin{funcdesc}{tcflush}{fd, queue}
ファイル記述子 \var{fd} にキューされたデータを無視します。
どのキューかは\var{queue} セレクタで指定します: \constant{TCIFLUSH} 
は入力キュー、 \constant{TCOFLUSH} は出力キュー、\constant{TCIOFLUSH} 
は両方のキューです。
\end{funcdesc}

\begin{funcdesc}{tcflow}{fd, action}
ファイル記述子 \var{fd} の入力または出力をサスペンドしたりレジューム
したりします。引数 \var{action} は出力をサスペンドする \constant{TCOOFF}、
出力をレジュームする \constant{TCOON} 、入力をサスペンドする
\constant{TCIOFF} 、入力をレジュームする \constant{TCION} をとることが
できます。
\end{funcdesc}


\begin{seealso}
  \seemodule{tty}{一般的な端末制御操作のための便利な関数。}
\end{seealso}


\subsection{使用例}
\nodename{termios Example}

以下はエコーバックを切った状態でパスワード入力を促す関数です。
ユーザの入力に関わらず以前の端末属性を正確に回復するために、
二つの \function{tcgetattr()} と \keyword{try} ... \keyword{finally}
文によるテクニックが使われています:

\begin{verbatim}
def getpass(prompt = "Password: "):
    import termios, sys
    fd = sys.stdin.fileno()
    old = termios.tcgetattr(fd)
    new = termios.tcgetattr(fd)
    new[3] = new[3] & ~termios.ECHO          # lflags
    try:
        termios.tcsetattr(fd, termios.TCSADRAIN, new)
        passwd = raw_input(prompt)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd
\end{verbatim}

