簡體   English   中英

為什么我在使用 minicom 時無法在 Linux C 程序中獲取窗口大小?

[英]Why do I can't get window size in Linux C program while I'm using minicom?

我有一些帶有 Linux 的板子。 我需要在程序中獲取窗口大小。 用戶可以通過minicomssh連接到開發板。 當我在使用ssh時運行我的程序一切正常,我可以獲得終端窗口大小。 但是當我在使用minicom時運行它時,我只得到零。 為什么會發生這種情況以及如何在兩種情況下獲得終端窗口大小?

這是我的代碼:

struct winsize win;

ioctl(STDIN_FILENO, TIOCGWINSZ, &win);

printf("lines %d\n", win.ws_row);
printf("columns %d\n", win.ws_col);

正如@Ruslan 所指出的, 如何獲得終端窗口寬度的答案之一 提到通過系統調用獲取屏幕大小的常用方法不適用於串行線路。

如果minicom支持 VT100 cursor-position report ,那么您可以在遠程 shell 命令行上使用resize來設置大小。 resize使用光標位置報告來確定屏幕的實際大小,打印結果並(這個問題的重點)更新終端設置,告訴其他應用程序屏幕大小是什么。 這僅適用於當前連接。 您可以使用stty命令查看效果。 在這個例子中,我的窗口是 40x80:

$ resize;stty -a
set noglob;
setenv COLUMNS '80';
setenv LINES '40';
unset noglob;
speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc

問題不清楚(有幾個 minicom 副本),至少它的Debian 源代碼似乎支持這一點(以'n'作為開頭)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM