благополучно принимают и игнорируют любую установленную вами скорость.
int tcsendbreak(int fd, int duration)
Посылает поток нулей в fd, чтобы узнать определенную длительность (duration), которая также известна как разрыв. Если duration равняется 0, разрыв длится не менее 250 и не более 500 миллисекунд. К сожалению, POSIX не определяет элемент, длительность которого измеряется, поэтому единственной переносимой величиной для duration является 0. В Linux длительность увеличивает разрыв; 0 или 1 задают длительность между четвертью секунды и полсекунды; 2 — между полсекунды и секундой и так далее.
int tcdrain(int fd)
Ожидает, пока не передадутся все входные данные, ожидающие в данный момент на файловом дескрипторе fd.
int tcflush(int fd, int queue_selector)
Отбрасывает некоторые данные в файловом дескрипторе fd в зависимости от величины queue_selector.
TCIFLUSH | Сбрасывает на диск все полученные, но еще не прочитанные интерфейсом данные. |
TCOFLUSH | Сбрасывает на диск все данные, записанные в интерфейс, но еще не отправленные. |
TCIOFLUSH | Сбрасывает на диск все ожидающие входные и выходные данные. |
int tcflow(int fd, int action)
Приостановить или возобновить вывод или ввод в файловом дескрипторе fd. Более точные действия определяются action.
TCOOFF | Приостановить вывод. |
TCOON | Восстановить вывод. |
TCIOFF | Передать символ STOP, запрашивающий прекращение передачи символов вторым концом соединения. |
TCION | Передать символ START, запрашивающий восстановление передачи символов вторым концом соединения. |
Обратите внимание, что TCIOFF и TCION необязательны, и даже если второй конец соединения принимает их на обработку, перед этим может возникнуть задержка.
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 для запроса нового размера и внесите в свою программу все необходимые изменения.
16.5.3. Флаги
Четыре флаговых переменных — c_iflag, с_oflag, c_cflag и c_lflag — хранят флаги, управляющие определенными характеристиками. Заголовочный файл <termios.h> предоставляет символические константы битовых масок, которые, в свою очередь, предоставляют эти флаги. Устанавливайте их с помощью |= и переустанавливайте с помощью &= и как показано ниже.
t.c_iflag |= BRKINT;
t.c_iflag &= ~IGNBRK;
