Почему я не могу получить размер окна в программе Linux C, когда я использую Minicom? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть доска с Linux. Мне нужно получить размер окна в программе. Пользователь может быть подключен к плате с помощью minicom или ssh. Когда я запускаю свою программу, пока использую ssh все в порядке, я могу получить размер окна терминала. Но когда я запускаю его, пока использую minicom, я получаю только нули. Почему это происходит и как я могу получить размер окна терминала в обоих случаях?

Вот мой код:

struct winsize win;

ioctl(STDIN_FILENO, TIOCGWINSZ, &win);

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

1 Ответ

0 голосов
/ 03 февраля 2020

Как заметил @Ruslan, один из ответов на Как получить ширину окна терминала? упоминает, что обычный способ получения экрана через системный вызов не работает поверх последовательная линия.

Если minicom поддерживает VT100 отчет о положении курсора , то вы можете использовать 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' в качестве начала).

...