# 34.2. `msvcrt` — Rotinas úteis do tempo de execução do MS VC++

Essas funções fornecem acesso a alguns recursos úteis nas plataformas Windows. Alguns módulos de nível superior usam essas funções para criar as implementações do Windows de seus serviços. Por exemplo, o módulo `getpass` usa isso na implementação da função `getpass()`.

Mais documentação sobre essas funções pode ser encontrada na documentação da API da plataforma.

O módulo implementa as variantes normal e ampla de caracteres da API de E/S do console. A API normal lida apenas com caracteres ASCII e é de uso limitado para aplicativos internacionalizados. A API ampla de caracteres deve ser usada sempre que possível.

Alterado na versão 3.3: As operações neste módulo agora levantam `OSError` onde `IOError` foi levantado.

## 34.2.1. Operações com arquivos

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

  Bloqueia parte de um arquivo com base no descritor de arquivo fd no tempo de execução C. Levanta `OSError` em falha. A região bloqueada do arquivo se estende da posição atual do arquivo para nbytes bytes e pode continuar além do final do arquivo. mode deve ser uma das constantes `LK_*` listadas abaixo. Várias regiões em um arquivo podem estar bloqueadas ao mesmo tempo, mas não podem se sobrepor. Regiões adjacentes não são mescladas; eles devem ser desbloqueados individualmente.

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

  Bloqueia os bytes especificados. Se os bytes não puderem ser bloqueados, o programa tentará imediatamente novamente após 1 segundo. Se, após 10 tentativas, os bytes não puderem ser bloqueados, `OSError` será levantado.

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

  Bloqueia os bytes especificados. Se os bytes não puderem ser bloqueados, `OSError` é levantado.

`msvcrt.``LK_UNLCK`

  Desbloqueia os bytes especificados, que devem ter sido bloqueados anteriormente.

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

  Defina o modo de conversão de final de linha para o descritor de arquivo fd. Para configurá-lo no modo de texto, flags deve ser `os.O_TEXT`; para binário, deve ser `os.O_BINARY`.

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

  Cria um descritor de arquivo em tempo de execução C a partir do identificador de arquivo handle. O parâmetro flags deve ser um OR bit a bit de `os.O_APPEND`, `os.O_RDONLY` e `os.O_TEXT`. O descritor de arquivo retornado pode ser usado como um parâmetro para `os.fdopen()` para criar um objeto de arquivo.

`msvcrt.``get_osfhandle`(fd)

  Retorna o identificador de arquivo para o descritor de arquivo fd. Leva `OSError` se fd não for reconhecido.

## 34.2.2. E/S de console

`msvcrt.``kbhit`()

  Return true if a keypress is waiting to be read.

`msvcrt.``getch`()

  Lê um pressionamento de tecla e retorna o caractere resultante como uma sequência de bytes. Nada é ecoado no console. Essa chamada será bloqueada se um pressionamento de tecla ainda não estiver disponível, mas não esperará que `Enter` seja pressionado. Se a tecla pressionada for uma tecla de função especial, ela retornará `\000'` ou `'\xe0'`; a próxima chamada retornará o código da chave. A tecla `Control-C` não pode ser lida com esta função.

`msvcrt.``getwch`()

  Variante com caractere largo de `getch()`, retornando um valor Unicode.

`msvcrt.``getche`()

  Semelhante a `getch()`, mas o pressionamento de tecla será repetido se representar um caractere imprimível.

`msvcrt.``getwche`()

  Variante com caractere largo de `getche()`, retornando um valor Unicode.

`msvcrt.``putch`(char)

  Imprime a sequência de bytes char no console sem armazenar em buffer.

`msvcrt.``putwch`(unicode_char)

  Variante com caractere largo de `putch()`, retornando um valor Unicode.

`msvcrt.``ungetch`(char)

  Faz com que a string de bytes char seja “empurrada” para o buffer do console; será o próximo caractere lido por `getch()` ou `getche()`.

`msvcrt.``ungetwch`(unicode_char)

  Variante com caractere largo de `ungetch()`, retornando um valor Unicode.

## 34.2.3. Outras funções

`msvcrt.``heapmin`()

  Força o heap `malloc()` a ser limpado e retorna os blocos não utilizados ao sistema operacional. Em caso de falha, isso gera `OSError`.