Книга: Разработка приложений в среде Linux. Второе издание

16.5.2. Размеры окна

16.5.2. Размеры окна

Существуют два запроса ioctl(), которые, к сожалению, не были закодированы как часть интерфейса termios, хотя и должны были. Размер tty, измеряемый строками и столбцами, должен управляться tcgetwinsize() и tcsetwinsize(), но, поскольку они не существуют, вместо этого следует использовать ioctl(). Для запроса текущего размера и установки нового размера применяйте структуру struct winsize.

#include <termios.h>
struct winsize {
 unsigned short ws_row;    /* количество строк */
 unsigned short ws_col;    /* количество столбцов */
 unsigned short ws_xpixel; /* не используется */
 unsigned short ws_ypixel; /* не используется */
};

Для запроса текущего размера используйте следующий вызов:

struct winsize ws;
ioctl(fd, TIOCGWINSZ, &ws);

Для установки нового размера заполните struct winsize и предусмотрите такой вызов:

ioctl(fd, TIOCSWINSZ, &ws);

В конце этой главы представлен пример условий, при которых возникает потребность в установке нового размера окна.

При изменении размеров окна лидеру группы процессов переднего плана на данном tty передается сигнал SIGWINCH. Ваш код может перехватить этот сигнал; используйте TIOCGWINSZ для запроса нового размера и внесите в свою программу все необходимые изменения.

Оглавление книги


Генерация: 0.975. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз