\section{\module{msvcrt} --
         MS V\Cpp 実行時システムの有用なルーチン群}

\declaremodule{builtin}{msvcrt}
  \platform{Windows}
\modulesynopsis{MS V\Cpp 実行時システムの雑多な有用ルーチン群。}
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}


このモジュールの関数は、 Windows プラットフォームの便利な機能の
いくつかに対するアクセス機構を提供しています。高レベルモジュール
のいくつかは、提供するサービスを Windows で実装するために、これらの
関数を使っています。例えば、 \refmodule{getpass} モジュールは
関数 \function{getpass()} を実装するためにこのモジュールの関数を
使います。

ここに挙げた関数の詳細なドキュメントについては、プラットフォーム API
ドキュメントで見つけることができます。


\subsection{ファイル操作関連 \label{msvcrt-files}}

\begin{funcdesc}{locking}{fd, mode, nbytes}
C 言語による実行時システムにおけるファイル記述子 \var{fd} に基づいて、
ファイルの一部にロックをかけます。ロックされるファイルの領域は、
現在のファイル位置から \var{nbytes} バイトで、ファイルの末端まで
延長することができます。\var{mode} は 以下に列挙する 
\constant{LK_\var{*}} のいずれか一つでなければなりません。
一つのファイルの複数の領域を同時にロックすることは可能ですが、
領域が重複してはなりません。連接する領域をまとめて指定することは
できません; それらの領域は個別にロック解除しなければなりません。
\end{funcdesc}

\begin{datadesc}{LK_LOCK}
\dataline{LK_RLCK}
指定されたバイト列にロックをかけます。指定領域がロックできなかった
場合、プログラムは 1 秒後に再度ロックを試みます。10 回
再試行した後でもロックをかけられない場合、\exception{IOError}
が送出されます。
\end{datadesc}

\begin{datadesc}{LK_NBLCK}
\dataline{LK_NBRLCK}
指定されたバイト列にロックをかけます。指定領域がロックできなかった
場合、\exception{IOError} が送出されます。
\end{datadesc}

\begin{datadesc}{LK_UNLCK}
指定されたバイト列のロックを解除します。指定領域はあらかじめロック
されていなければなりません。
\end{datadesc}

\begin{funcdesc}{setmode}{fd, flags}
ファイル記述子 \var{fd} に対して、行末文字の変換モードを設定します。
テキストモードに設定するには、\var{flags} を \constant{os.O_TEXT}
にします; バイナリモードにするには \constant{os.O_BINARY} にします。
\end{funcdesc}

\begin{funcdesc}{open_osfhandle}{handle, flags}
C 言語による実行時システムにおけるファイル記述子をファイルハンドル
\var{handle} から生成します。\var{flags} パラメタは
\constant{os.O_APPEND}、 \constant{os.O_RDONLY}、および
\constant{os.O_TEXT} をビット単位で OR したものになります。
返されるファイル記述子は \function{os.fdopen()} でファイルオブジェクト
を生成するために使うことができます。
\end{funcdesc}

\begin{funcdesc}{get_osfhandle}{fd}
ファイル記述子 \var{fd} のファイルハンドルを返します。\var{fd}
が認識できない場合、 \var{IOError} を送出します。
\end{funcdesc}


\subsection{コンソール I/O 関連 \label{msvcrt-console}}

\begin{funcdesc}{kbhit}{}
読み出し待ちの打鍵イベントが存在する場合に真を返します。
\end{funcdesc}

\begin{funcdesc}{getch}{}
打鍵を読み取り、読み出された文字を返します。コンソールには
何もエコーバックされません。この関数呼び出しは読み出し可能な
打鍵がない場合にはブロックしますが、文字を読み出せるように
するために \kbd{Enter} の打鍵を待つ必要はありません。
打鍵されたキーが特殊機能キー (function key) である場合、この
関数は \code{'\e000'} または \code{'\e xe0'} を返します; 
キーコードは次に関数を呼び出した際に返されます。この関数で
\kbd{Control-C} の打鍵を読み出すことはできません。
\end{funcdesc}

\begin{funcdesc}{getche}{}
\function{getch()} に似ていますが、打鍵した字が印字可能な文字の
場合エコーバックされます。
\end{funcdesc}

\begin{funcdesc}{putch}{char}
キャラクタ \var{char} をバッファリングを行わないでコンソールに
出力します。
\end{funcdesc}

\begin{funcdesc}{ungetch}{char}
キャラクタ \var{char} をコンソールバッファに 
``押し戻し (push back)'' ます; これにより、押し戻された
文字は \function{getch()} や \function{getche()} で次に
読み出される文字になります。
\end{funcdesc}


\subsection{その多の関数 \label{msvcrt-other}}

\begin{funcdesc}{heapmin}{}
\cfunction{malloc()} されたヒープ領域を強制的に消去させて、未使用の
メモリブロックをオペレーティングシステムに返します。この関数は
Windows NT 上でのみ動作します。失敗した場合、 \exception{IOError}
を送出します。
\end{funcdesc}
