# 35.2. `msvcrt` --- MS VC++実行時システムの有用なルーチン群

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

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

このモジュールは、通常版とワイド文字列版の両方のコンソールI/O APIを実装しています。通常版の API は ASCII 文字列のためのもので、国際化アプリケーションでは利用が制限されます。可能な限りワイド文字列版APIを利用するべきです。

## 35.2.1. ファイル操作関連

`msvcrt.``locking`(fd, mode, nbytes)

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

`msvcrt.``LK_LOCK`
`msvcrt.``LK_RLCK`

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

`msvcrt.``LK_NBLCK`
`msvcrt.``LK_NBRLCK`

  指定されたバイト列にロックをかけます。指定領域がロックできなかった場合、 `IOError` が送出されます。

`msvcrt.``LK_UNLCK`

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

`msvcrt.``setmode`(fd, flags)

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

`msvcrt.``open_osfhandle`(handle, flags)

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

`msvcrt.``get_osfhandle`(fd)

  ファイル記述子 fd のファイルハンドルを返します。 fd が認識できない場合、 IOError を送出します。

## 35.2.2. コンソール I/O 関連

`msvcrt.``kbhit`()

  読み出し待ちの打鍵イベントが存在する場合に真を返します。

`msvcrt.``getch`()

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

`msvcrt.``getwch`()

  `getch()` のワイド文字列版。Unicode の値を返します。

  バージョン 2.6 で追加.

`msvcrt.``getche`()

  `getch()` に似ていますが、打鍵した字が印字可能な文字の場合エコーバックされます。

`msvcrt.``getwche`()

  `getche()` のワイド文字列版。Unicode の値を返します。

  バージョン 2.6 で追加.

`msvcrt.``putch`(char)

  キャラクタ char をバッファリングを行わないでコンソールに出力します。

`msvcrt.``putwch`(unicode_char)

  `putch()` のワイド文字列版。Unicode の値を引数に取ります。

  バージョン 2.6 で追加.

`msvcrt.``ungetch`(char)

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

`msvcrt.``ungetwch`(unicode_char)

  `ungetch()` のワイド文字列版。Unicode の値を引数に取ります。

  バージョン 2.6 で追加.

## 35.2.3. その多の関数

`msvcrt.``heapmin`()

  `malloc()` されたヒープ領域を強制的に消去させて、未使用のメモリブロックをオペレーティングシステムに返します。失敗した場合、 `IOError` を送出します。