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

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

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

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

バージョン 3.3 で変更: このモジュールの操作で以前は `IOError` が送出されていたところで `OSError` が送出されるようになりました。

## ファイル操作関連

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

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

  引数 `fd`, `mode`, `nbytes` を指定して 監査イベント `msvcrt.locking` を送出します。

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

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

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

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

`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()` でファイルオブジェクトを生成するために使うことができます。

  引数 `handle`, `flags` を指定して 監査イベント `msvcrt.open_osfhandle` を送出します。

`msvcrt.``get_osfhandle`(fd)

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

  引数 `fd` を指定して 監査イベント `msvcrt.get_osfhandle` を送出します。

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

`msvcrt.``kbhit`()

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

`msvcrt.``getch`()

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

`msvcrt.``getwch`()

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

`msvcrt.``getche`()

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

`msvcrt.``getwche`()

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

`msvcrt.``putch`(char)

  バイト文字列 char をバッファリングを行わないでコンソールに出力します。

`msvcrt.``putwch`(unicode_char)

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

`msvcrt.``ungetch`(char)

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

`msvcrt.``ungetwch`(unicode_char)

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

## その多の関数

`msvcrt.``heapmin`()

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