# `msvcrt` — MS VC++ 런타임의 유용한 루틴

이 함수들은 윈도우 플랫폼에서 유용한 기능에 대한 액세스를 제공합니다. 일부 고수준 모듈은 이러한 함수를 사용하여 해당 서비스의 윈도우 구현을 구축합니다. 예를 들어, `getpass` 모듈은 `getpass()` 함수를 구현할 때 이를 사용합니다.

이 함수에 대한 자세한 설명은 플랫폼 API 설명서에서 찾을 수 있습니다.

이 모듈은 콘솔 I/O api의 일반과 광폭(wide) 문자 변형을 모두 구현합니다. 일반 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)

  파일 핸들 handle에서 C 런타임 파일 기술자를 만듭니다. 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`가 눌러지기를 기다리지는 않습니다. 누른 키가 특수 기능 키면, `'\000'` 이나 `'\xe0'`를 반환합니다; 다음 호출은 키코드를 반환합니다. 이 함수로 ``Control`-`C`` 키 누르기를 읽을 수 없습니다.

`msvcrt.``getwch`()

  유니코드 값을 반환하는 `getch()`의 광폭 문자 변형.

`msvcrt.``getche`()

  `getch()`와 비슷하지만, 인쇄 가능한 문자를 나타내는 경우 키 누르기가 에코 됩니다.

`msvcrt.``getwche`()

  유니코드 값을 반환하는 `getche()`의 광폭 문자 변형.

`msvcrt.``putch`(char)

  버퍼링하지 않고 바이트열 char을 콘솔에 인쇄합니다.

`msvcrt.``putwch`(unicode_char)

  유니코드 값을 받아들이는 `putch()`의 광폭 문자 변형.

`msvcrt.``ungetch`(char)

  바이트열 char이 콘솔 버퍼로 “푸시백” 되도록 합니다; `getch()` 나 `getche()`가 읽는 다음 문자가 됩니다.

`msvcrt.``ungetwch`(unicode_char)

  유니코드 값을 받아들이는 `ungetch()`의 광폭 문자 변형.

## 기타 함수

`msvcrt.``heapmin`()

  강제로 `malloc()` 힙이 자신을 정리하고, 사용하지 않는 블록을 운영 체제로 반환하도록 합니다. 실패하면, `OSError`가 발생합니다.