[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Программные каналы
Характеристики:

.    предназначены для передачи данных между процессами
.    могут передавать неограниченное количество данных
.    автоматическая синхронизация open(2)
.    автоматическая блокировка при заполнении и исчерпании
.    типы каналов:
   - каналы

   - именованные каналы
                 Доступ к данным в программном канале

Данные пишутся  в канал  так же,  как  и  в  обычный  файл,  используя
системный вызов  write(2). Как  упоминалось выше,  если канал не имеет
места для  записи всех  данных,  write(2)  останавливается.  Частичная
запись никогда не делается.

Данные читаются  из  канала  при  помощи  системного  вызова  read(2);
однако, в отличие от обычных файлов, чтение разрушает данные в канале.
Это означает,  что вы  не можете  использовать  lseek(2)  для  попыток
прочитать данные заново.

Обычно один  процесс использует указатель записи, а другой - указатель
чтения. В  принципе, один  и тот  же процесс  может писать  данные  по
указателю записи  и читать их, используя указатель чтения, но это, как
правило,  бессмысленно.   Может  быть  несколько  читающих  и  пишущих
процессов. На  практике, нет смысла иметь несколько читающих процессов
- это  потребовало  бы  использования  другого  метода  межпроцессного
взаимодействия. Но  канал с  несколькими пишущими  в  него  процессами
может иметь смысл.

Если процесс  пытается писать в канал, из которого никто не читает, он
получит сигнал SIGPIPE.

Вопрос: если  вы хотите  прекратить  команду,  использующую  конвейер,
какой из процессов вы должны убить?
Ответ: последний процесс в конвейере.

Диаграмма на  иллюстрации показывает  данные, записанные в программный
канал, но еще не прочитанные из него. Система использует два указателя
для того,  чтобы следить,  куда пишутся данные, и откуда они читаются.
Для этого повторно используются те же самые десять блоков.