# 34.2. `msvcrt` - 从MS VC ++运行时的有用例程

这些函数提供对Windows平台上一些有用功能的访问。一些更高级别的模块使用这些功能来构建他们的服务的Windows实现。例如，`getpass`模块在实现`getpass()`函数时使用此方法。

有关这些功能的更多文档可以在Platform API文档中找到。

该模块实现控制台I / O API的正常和宽字符变量。普通API仅处理ASCII字符，并且对于国际化应用程序的使用有限。应尽可能使用宽字符API。

在版本3.3中更改：此模块中的操作现已引发`OSError`其中`IOError`被引发。

## 34.2.1. File Operations

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

  根据C运行时文件描述器fd锁定文件的一部分。失败时引发`OSError`。文件的锁定区域从nbytes字节的当前文件位置延伸，并且可以继续超出文件结尾。模式必须是下面列出的`LK_*`常量之一。文件中的多个区域可以同时被锁定，但是可以不重叠。相邻区域不合并；它们必须单独解锁。

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

  锁定指定的字节。如果字节不能被锁定，程序在1秒后立即再次尝试。如果在尝试10次后，字节不能被锁定，则会引发`OSError`。

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

  锁定指定的字节。如果字节不能锁定，则会引发`OSError`。

`msvcrt.``LK_UNLCK`

  解锁指定的字节，必须先前已锁定。

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

  设置文件描述器fd的行末翻译模式。要将其设置为文本模式，标志应为`os.O_TEXT`；对于二进制，应为`os.O_BINARY`。

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

  从文件句柄句柄创建C运行时文件描述器。标志参数应为`os.O_APPEND`，`os.O_RDONLY`和`os.O_TEXT`的按位或。返回的文件描述器可以用作`os.fdopen()`的参数来创建文件对象。

`msvcrt.``get_osfhandle`(fd)

  返回文件描述器fd的文件句柄。引发`OSError`如果fd无法识别。

## 34.2.2. Console I/O

`msvcrt.``kbhit`()

  如果键盘正在等待读取，则返回true。

`msvcrt.``getch`()

  读取按键并将结果字符作为字节字符串返回。没有回声到控制台。如果按键不可用，则此调用将阻止，但不会等待按下`Enter`。如果按下的键是特殊功能键，则将返回`'\000'`或`'\xe0'`；下一个调用将返回键码。使用此功能无法读取`Control-C`按键。

`msvcrt.``getwch`()

  `getch()`的宽字符变量，返回Unicode值。

`msvcrt.``getche`()

  类似于`getch()`，但是如果它代表一个可打印的字符，keypress将被回显。

`msvcrt.``getwche`()

  `getche()`的宽字符变体，返回Unicode值。

`msvcrt.``putch`(char)

  将字节字符串char打印到控制台，无需缓冲。

`msvcrt.``putwch`(unicode_char)

  宽字符变体`putch()`，接受Unicode值。

`msvcrt.``ungetch`(char)

  导致字节串char被“推回”到控制台缓冲区；它将是由`getch()`或`getche()`读取的下一个字符。

`msvcrt.``ungetwch`(unicode_char)

  `ungetch()`的宽字符变体，接受Unicode值。

## 34.2.3. Other Functions

`msvcrt.``heapmin`()

  强制`malloc()`堆清理自己并将未使用的块返回到操作系统。失败时，此引发`OSError`。