Подсистема STREAMS в UNIX работает следующим образом: 5
- Когда пользовательский процесс открывает потоковое устройство, ядро связывает с драйвером заголовок потока. 1 После этого пользовательский процесс общается с заголовком потока так, как если бы он представлял собой обычный драйвер устройства. 1
- Если процесс выполняет запись в устройство (системный вызов write), заголовок потока передаёт данные драйверу устройства в нисходящем направлении. 1 Аналогично, при реализации чтения из устройства (системный вызов read) драйвер устройства передаёт данные заголовку потока в восходящем направлении. 1
- Данные между заголовком потока и драйвером устройства передаются в неизменяемом виде без какой-либо промежуточной обработки. 1 Однако можно добиться того, чтобы данные подвергались обработке при передаче их в любом направлении, если включить в поток между заголовком и драйвером устройства один или несколько потоковых модулей. 1
- Потоковый модуль является обработчиком данных, выполняющим определённый набор функций над данными по мере их прохождения по потоку. 1 Простейшими примерами потокового модуля являются разного рода перекодировщики символьной информации. 1
- Для передачи данных от заголовка к драйверу или модулю, от одного модуля другому и от драйвера или модуля к заголовку потока используется механизм сообщений. 1 Каждое сообщение представляет собой набор блоков сообщения, каждый из которых состоит из заголовка, блока данных и буфера данных. 1
Пользовательский процесс может в любой момент запросить сообщение из очереди чтения головного модуля с помощью системного вызова read или getmsg. 5