[英]What does printf(“\033c” ) mean?
關閉程序后,我一直在尋找一種“重置” Unix終端窗口的方法,偶然發現了printf("\\033c" );
效果很好,但我聽不懂。 我去了man console_codes
,由於我對Unix c編程不了解,所以它不是很有幫助。
有人可以解釋一下printf("\\033c" );
?
在C中, 以前導零開頭的數字是八進制數字。 以8為底的數字。
它所做的是打印由八進制數字33
表示的字符,后跟一個'c'
。
在ASCII編碼中 ,八進制數字33
是ESC
(轉義)字符,它是終端控制序列的通用前綴。
借助搜索終端控制序列的知識,我們可以找到例如VT100控制序列參考 ( VT100是一個古老的“啞”終端,並且被大多數現代終端程序所模擬)。 使用VT100參考,我們在終端設置部分找到<ESC>c
,該文件記錄為
重置設備
<ESC>c
將所有終端設置重置為默認值。
ESC
字符也可以使用"\\x1b"
(仍然假定為ASCII編碼)進行打印。 無法在常量字符串文字中使用十進制數字,只能使用八進制和十六進制。
但是 (如所指出的chux的表彰序列) "\\x1bc"
不會做一樣的"\\033c"
。 這是因為0x1bc
是有效的十六進制數,並且編譯器在解析此類序列時會貪婪 。 它會改為打印由值0x1bc
表示的字符,我不知道它可能是什么(取決於我認為的語言環境和終端設置,可能應將其當作Unicode字符使用)。
這是用於重置 DEC VT100(或兼容)端子的轉義序列。 某些終端(例如Linux控制台)接受VT100樣式的轉義序列,即使它們實際上不是VT100。
\\033
是ASCII轉義字符,以這些序列開頭。 多數字符后跟另一個特殊字符(這是罕見的例外)。 XTerm Control Sequences列出了該列表以及未帶有特殊字符的其他字符。
在ECMA-48中,通常情況下可以使用其他字符,例如[
*控制序列啟動器。
重置真正的VT100(與終端仿真器相比)並不能清除屏幕,正如Debian Bug報告日志中指出的那樣-笨拙的終端#60377“重置”已損壞 ,但是終端仿真器的用戶傾向於認為這是一種簡短的方法清除屏幕。 標准方式如下:
printf("\033[H\033[J");
ncurses常見問題解答為什么重置會使我注銷? 解決了這個問題。
順便說一下,終端仿真器的用戶也會因終端混亂而遇到其他問題。 ncurses常見問題解答如何使用VT100着色? 解決其中之一。
它會在Linux類型的操作系統(ubuntu,fedora等)中清除屏幕。 您可以在此處檢查ASCII表。 在八進制33(十進制27)下,您具有ESC字符。 http://www.asciitable.com/index/asciifull.gif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.