msvcrt --- 來(lái)自 MS VC++ 運行時(shí)的有用例程?


這些函數提供了對 Windows 平臺上一些有用功能的訪(fǎng)問(wèn)。一些更高級別的模塊使用這些函數來(lái)構建其服務(wù)的 Windows 實(shí)現。 例如, getpass 模塊在實(shí)現 getpass() 函數時(shí)使用了這些函數。

關(guān)于這些函數的更多信息可以在平臺 API 文檔中找到。

該模塊實(shí)現了控制臺 I/O API 的普通和寬字符變體。普通的 API 只處理ASCII字符,國際化應用受限。應該盡可能地使用寬字符 API 。

在 3.3 版更改: 此模塊中過(guò)去會(huì )引發(fā) IOError 的操作現在將引發(fā) OSError。

文件操作?

msvcrt.locking(fd, mode, nbytes)?

基于文件描述符 fd 從 C 運行時(shí)鎖定文件的某一部分。 失敗時(shí)引發(fā) OSError。 鎖定的文件區域從當前文件位置開(kāi)始擴展 nbytes 個(gè)字節,并可能持續到超出文件末尾。 mode 必須為下面列出的 LK_* 之一。 一個(gè)文件中的多個(gè)區域可以被同時(shí)鎖定,但是不能重疊。 相鄰區域不會(huì )被合并;它們必須單獨被解鎖。

引發(fā)一個(gè) 審計事件 msvcrt.locking,附帶參數 fd, mode, nbytes。

msvcrt.LK_LOCK?
msvcrt.LK_RLCK?

鎖定指定的字節數據。 如果字節數據無(wú)法被鎖定,程序會(huì )在 1 秒之后立即重試。 如果在 10 次嘗試后字節數據仍無(wú)法被鎖定,則會(huì )引發(fā) OSError。

msvcrt.LK_NBLCK?
msvcrt.LK_NBRLCK?

鎖定指定的字節數據。 如果字節數據無(wú)法被鎖定,則會(huì )引發(fā) OSError。

msvcrt.LK_UNLCK?

解鎖指定的字節數據,該對象必須在之前被鎖定。

msvcrt.setmode(fd, flags)?

設置文件描述符 fd 的行結束符轉寫(xiě)模式。 要將其設為文本模式,則 flags 應當為 os.O_TEXT;設為二進(jìn)制模式,則應當為 os.O_BINARY。

msvcrt.open_osfhandle(handle, flags)?

基于文件句柄 handle 創(chuàng )建一個(gè) C 運行時(shí)文件描述符。 flags 形參應當 os.O_APPEND, os.O_RDONLYos.O_TEXT 按位 OR 的結果。 返回的文件描述符可以被用作 os.fdopen() 的形參以創(chuàng )建一個(gè)文件對象。

引發(fā)一個(gè) 審計事件 msvcrt.open_osfhandle,附帶參數 handle, flags。

msvcrt.get_osfhandle(fd)?

返回文件描述符 fd 的文件句柄。 如果 fd 不能被識別則會(huì )引發(fā) OSError。

引發(fā)一個(gè) 審計事件 msvcrt.get_osfhandle,附帶參數 fd。

控制臺 I/O?

msvcrt.kbhit()?

如果有某個(gè)按鍵正在等待被讀取則返回 True。

msvcrt.getch()?

讀取一個(gè)按鍵并將結果字符返回為一個(gè)字節串。 不會(huì )有內容回顯到縫制臺。 如果還沒(méi)有任何鍵被按下此調用將會(huì )阻塞,但它將不會(huì )等待 Enter 被按下。 如果按下的鍵是一個(gè)特殊功能鍵,此函數將返回 '\000''\xe0';下一次調用將返回鍵代碼。 Control-C 按鈕無(wú)法使用此函數來(lái)讀取。

msvcrt.getwch()?

getch() 的寬字符版本,返回一個(gè) Unicode 值。

msvcrt.getche()?

類(lèi)似于 getch(),但按鍵如果表示一個(gè)可打印字符則它將被回顯。

msvcrt.getwche()?

getche() 的寬字符版本,返回一個(gè) Unicode 值。

msvcrt.putch(char)?

將字符串 char 打印到終端,不使用緩沖區。

msvcrt.putwch(unicode_char)?

putch() 的寬字符版本,接受一個(gè) Unicode 值。

msvcrt.ungetch(char)?

使得字節串 char 被“推回”終端緩沖區;它將是被 getch()getche() 讀取的下一個(gè)字符。

msvcrt.ungetwch(unicode_char)?

ungetch() 的寬字符版本,接受一個(gè) Unicode 值。

其他函數?

msvcrt.heapmin()?

強制 malloc() 堆清空自身并將未使用的塊返回給操作系統。 失敗時(shí),這將引發(fā) OSError。