34.2. "msvcrt" --- 来自 MS VC++ 运行时的有用例程
************************************************

======================================================================

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

关于这些函数的更多信息可以在平台 API 文档中找到。

该模块实现了控制台 I/O API 的普通和宽字符变体。普通的 API 只处理ASCII
字符，国际化应用受限。应该尽可能地使用宽字符 API 。

3.3 版更變: 此模块中过去会引发 "IOError" 的操作现在将引发 "OSError"。


34.2.1. 文件操作
================

msvcrt.locking(fd, mode, nbytes)

   基于文件描述符 *fd* 从 C 运行时锁定文件的某一部分。 失败时引发
   "OSError"。 锁定的文件区域从当前文件位置开始扩展 *nbytes* 个字节，
   并可能持续到超出文件末尾。 *mode* 必须为下面列出的 "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* 的行结束符转写模式。 要将其设为文本模式，则
   *flags* 应当为 "os.O_TEXT"；设为二进制模式，则应当为 "os.O_BINARY"
   。

msvcrt.open_osfhandle(handle, flags)

   基于文件句柄 *handle* 创建一个 C 运行时文件描述符。 *flags* 形参应
   当 "os.O_APPEND", "os.O_RDONLY" 和 "os.O_TEXT" 按位 OR 的结果。 返
   回的文件描述符可以被用作 "os.fdopen()" 的形参以创建一个文件对象。

msvcrt.get_osfhandle(fd)

   返回文件描述符 *fd* 的文件句柄。 如果 *fd* 不能被识别则会引发
   "OSError"。


34.2.2. 控制台 I/O
==================

msvcrt.kbhit()

   Return true if a keypress is waiting to be read.

msvcrt.getch()

   读取一个按键并将结果字符返回为一个字节串。 不会有内容回显到缝制台。
   如果还没有任何键被按下此调用将会阻塞，但它将不会等待 "Enter" 被按下
   。 如果按下的键是一个特殊功能键，此函数将返回 "'\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* 被“推回”终端缓冲区；它将是被 "getch()" 或
   "getche()" 读取的下一个字符。

msvcrt.ungetwch(unicode_char)

   "ungetch()" 的宽字符版本，接受一个 Unicode 值。


34.2.3. 其他函数
================

msvcrt.heapmin()

   强制 "malloc()" 堆清空自身并将未使用的块返回给操作系统。 失败时，这
   将引发 "OSError"。
