我正在自學 C ,目前正在運行最新的 Fedora。
在 Windows 命令提示符下,您可以確定螢屏位置。我被引導相信 Linux 命令終端可以有效地作業,就像列印到一張紙上的字符一樣。即你不能從你所在的地方“上升”。
但是,當您在 Linux 中安裝時,會出現一個進度條(以文本形式),隨著進度的增加,它似乎不會每次都列印新行。此外,以 raspbi-config 為例,您可以在其中上下選項卡/箭頭“選單”并選擇“確定”和“取消”等。
如何實作這一目標?那么這可以用來在 Linux 中像在 Windows 下那樣做簡單的文本圖形應用程式嗎?
任何幫助,將不勝感激。
優步公司。
用 C 編碼。簡單地“輸出”到標準輸出的一般非 gui 應用程式。只發現一兩個示例顯示列印到同一行的進度條,但我不清楚。
uj5u.com熱心網友回復:
在基本層面上,有兩個東西可以在 Linux(或其他 POSIX)終端上啟用這些東西:ASCII 控制字符和 ANSI 轉義碼。
對于一個簡單的進度條,知道螢屏的寬度并有辦法回到當前終端行的開頭就足夠了。這可以通過讀取環境變數$COLUMNS和getenv列印 ASCII 控制字符來實作\r。一個非常簡單和不美化的例子是
#include <iostream>
#include <sstream>
#include <string>
#include <unistd.h>
int main() {
// Default screen width
int width = 80;
// Get screenwidth from environment
char const *envwidth = getenv("COLUMNS");
if(envwidth != nullptr) {
std::istringstream(envwidth) >> width;
}
// save some space for numeric display
width -= 10;
for(int i = 1; i < width; i) {
std::cout
<< '\r' // go back to start of line
<< std::string(i, '.') // progress bar
<< std::string(width - i, ' ') // padding
<< "| " << i << '/' << width // numeric display
<< std::flush; // make the progress bar instantly visible
// pretend to work
usleep(100000);
}
}
對于更多涉及的終端“圖形”,有ANSI 轉義碼。這些允許您通過將特殊字符序列列印到標準輸出來設定前景色和背景色、隨意在螢屏上移動以及其他一些事情。例如,
std::cout << "\x1b[10;20HHello, world." << std::flush;
Hello, world.將在螢屏上的位置 10、20列印。
還有ncurses提供更多高級終端 UI 功能(視窗、對話框等)的庫。他們在后臺使用 ANSI 轉義碼,但使用它通常比滾動您自己的 UI 框架更好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/532999.html
標籤:C linux终端
