На следующей странице приведены подпрограммы для установки терминального интерфейса в режим ввода/вывода необработанных данных ("сырой") и восстановления исходного режима. Эти подпрограммы работаюттак:
8 fd присваивается 0 или 1, если setrawio вызывается получателем (recv) или передатчиком (xmit), соответственно.
10-11 Если дескриптор файла 0 или 1 не ассоциирован с терминальным специальным файлом, эта функция возвращает управление немедленно. Это позволяет программе, использующей setrawio, перенаправить свой стандартный ввод/вывод в файл или программный канал (в этом случае, setrawio вообще не нужен). Если же дескриптор ассоциирован с терминальным специальным файлом, то режим интерфейса переключается на "сырой" ввод/вывод.
12-15 Для заданного дескриптора файла считывается значение структуры termios.
16 Копия структуры termios сохраняется для восстановления режима терминального интерфейса, который был до вызова setrawio.
17-22 Флаги в структуре termios устанавливаются для приема и передачи произвольных восьмибитных данных. Срезание старшего бита, отображение вводимых символов и управление потоком ввода выключены. Размер символа установлен равным восьми битам, и выключен контроль четности. Поиск специальных управляющих символов, канонический ввод и эхо в поле флагов локального режима также выключены. Заметьте, что эта функция одна и та же как для ввода, так и для вывода, так как установки флагов для ввода не влияют на вывод, и наоборот.
23-24 Для неканонического ввода MIN устанавливается равным размеру буфера ввода, используемого в вызове read(2). Таймер не используется, поэтому TIME устанавливается в ноль.
25 Режим терминального интерфейса будет изменен после того, как весь вывод будет передан, а ввод - сброшен.
32 Терминальный интерфейс возвращается в то состояние, в котором он находился до вызова функции setrawio.
Файл: setrawio.c
ПЕРЕДАЧА ДВОИЧНОГО ФАЙЛА - ПРИМЕР setrawio.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <termios.h>
4 #include "xmit.h"
6 static struct termios tty, savtty;
8 void setrawio(int fd) /* set "raw" input/output modes */