17db96d56Sopenharmony_ci:mod:`msvcrt` --- Useful routines from the MS VC++ runtime
27db96d56Sopenharmony_ci==========================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: msvcrt
57db96d56Sopenharmony_ci   :platform: Windows
67db96d56Sopenharmony_ci   :synopsis: Miscellaneous useful routines from the MS VC++ runtime.
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci--------------
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ciThese functions provide access to some useful capabilities on Windows platforms.
137db96d56Sopenharmony_ciSome higher-level modules use these functions to build the  Windows
147db96d56Sopenharmony_ciimplementations of their services.  For example, the :mod:`getpass` module uses
157db96d56Sopenharmony_cithis in the implementation of the :func:`getpass` function.
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciFurther documentation on these functions can be found in the Platform API
187db96d56Sopenharmony_cidocumentation.
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ciThe module implements both the normal and wide char variants of the console I/O
217db96d56Sopenharmony_ciapi. The normal API deals only with ASCII characters and is of limited use
227db96d56Sopenharmony_cifor internationalized applications. The wide char API should be used where
237db96d56Sopenharmony_ciever possible.
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci.. versionchanged:: 3.3
267db96d56Sopenharmony_ci   Operations in this module now raise :exc:`OSError` where :exc:`IOError`
277db96d56Sopenharmony_ci   was raised.
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci.. _msvcrt-files:
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ciFile Operations
337db96d56Sopenharmony_ci---------------
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci.. function:: locking(fd, mode, nbytes)
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   Lock part of a file based on file descriptor *fd* from the C runtime.  Raises
397db96d56Sopenharmony_ci   :exc:`OSError` on failure.  The locked region of the file extends from the
407db96d56Sopenharmony_ci   current file position for *nbytes* bytes, and may continue beyond the end of the
417db96d56Sopenharmony_ci   file.  *mode* must be one of the :const:`LK_\*` constants listed below. Multiple
427db96d56Sopenharmony_ci   regions in a file may be locked at the same time, but may not overlap.  Adjacent
437db96d56Sopenharmony_ci   regions are not merged; they must be unlocked individually.
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci   .. audit-event:: msvcrt.locking fd,mode,nbytes msvcrt.locking
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci.. data:: LK_LOCK
497db96d56Sopenharmony_ci          LK_RLCK
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci   Locks the specified bytes. If the bytes cannot be locked, the program
527db96d56Sopenharmony_ci   immediately tries again after 1 second.  If, after 10 attempts, the bytes cannot
537db96d56Sopenharmony_ci   be locked, :exc:`OSError` is raised.
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci.. data:: LK_NBLCK
577db96d56Sopenharmony_ci          LK_NBRLCK
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci   Locks the specified bytes. If the bytes cannot be locked, :exc:`OSError` is
607db96d56Sopenharmony_ci   raised.
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci.. data:: LK_UNLCK
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci   Unlocks the specified bytes, which must have been previously locked.
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci.. function:: setmode(fd, flags)
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci   Set the line-end translation mode for the file descriptor *fd*. To set it to
717db96d56Sopenharmony_ci   text mode, *flags* should be :const:`os.O_TEXT`; for binary, it should be
727db96d56Sopenharmony_ci   :const:`os.O_BINARY`.
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci.. function:: open_osfhandle(handle, flags)
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   Create a C runtime file descriptor from the file handle *handle*.  The *flags*
787db96d56Sopenharmony_ci   parameter should be a bitwise OR of :const:`os.O_APPEND`, :const:`os.O_RDONLY`,
797db96d56Sopenharmony_ci   and :const:`os.O_TEXT`.  The returned file descriptor may be used as a parameter
807db96d56Sopenharmony_ci   to :func:`os.fdopen` to create a file object.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci   .. audit-event:: msvcrt.open_osfhandle handle,flags msvcrt.open_osfhandle
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci.. function:: get_osfhandle(fd)
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci   Return the file handle for the file descriptor *fd*.  Raises :exc:`OSError` if
887db96d56Sopenharmony_ci   *fd* is not recognized.
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   .. audit-event:: msvcrt.get_osfhandle fd msvcrt.get_osfhandle
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci.. _msvcrt-console:
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ciConsole I/O
967db96d56Sopenharmony_ci-----------
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci.. function:: kbhit()
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci   Return ``True`` if a keypress is waiting to be read.
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci.. function:: getch()
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci   Read a keypress and return the resulting character as a byte string.
1077db96d56Sopenharmony_ci   Nothing is echoed to the console.  This call will block if a keypress
1087db96d56Sopenharmony_ci   is not already available, but will not wait for :kbd:`Enter` to be
1097db96d56Sopenharmony_ci   pressed. If the pressed key was a special function key, this will
1107db96d56Sopenharmony_ci   return ``'\000'`` or ``'\xe0'``; the next call will return the keycode.
1117db96d56Sopenharmony_ci   The :kbd:`Control-C` keypress cannot be read with this function.
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci.. function:: getwch()
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci   Wide char variant of :func:`getch`, returning a Unicode value.
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci.. function:: getche()
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci   Similar to :func:`getch`, but the keypress will be echoed if it  represents a
1227db96d56Sopenharmony_ci   printable character.
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci.. function:: getwche()
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci   Wide char variant of :func:`getche`, returning a Unicode value.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci.. function:: putch(char)
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci   Print the byte string *char* to the console without buffering.
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci.. function:: putwch(unicode_char)
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci   Wide char variant of :func:`putch`, accepting a Unicode value.
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci.. function:: ungetch(char)
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci   Cause the byte string *char* to be "pushed back" into the console buffer;
1437db96d56Sopenharmony_ci   it will be the next character read by :func:`getch` or :func:`getche`.
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci.. function:: ungetwch(unicode_char)
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci   Wide char variant of :func:`ungetch`, accepting a Unicode value.
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci.. _msvcrt-other:
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ciOther Functions
1547db96d56Sopenharmony_ci---------------
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci.. function:: heapmin()
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci   Force the :c:func:`malloc` heap to clean itself up and return unused blocks to
1607db96d56Sopenharmony_ci   the operating system.  On failure, this raises :exc:`OSError`.
161