Вход/Регистрация
Разработка приложений в среде Linux. Второе издание
вернуться

Троан Эрик В.

Шрифт:

Не все tty поддерживают все скорости — последовательные порты на стандартных ПК не поддерживают более 115 200 бит/с. Как уже упоминалось выше, если для вас имеет значение, вступит ли в силу определенная настройка, необходимо использовать

tcgetattr
для проверки после того, как вы попытаетесь установить ее с помощью
tcsetattr
. Также обратите внимание, что установленная вами скорость является необязательной. Некоторые tty, например, локальные консоли, благополучно принимают и игнорируют любую установленную вами скорость.

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;

  • Читать дальше
  • 1
  • ...
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: