Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 184 из 715

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



5.12.5 Примеры



Программа на Рисунке 5.18 иллюстрирует искусственное использование каналов. Процесс создает канал и входит в бесконечный цикл, записывая в канал строку символов «hello» и считывая ее из канала. Ядру не нужно ни знать о том, что процесс, ведущий запись в канал, является и процессом, считывающим из канала, ни проявлять по этому поводу какое-либо беспокойство.

char string[] = "hello";

main() {

 char buf[1024];

 char *cp1,*cp2;

 int fds[2];

 cp1 = string;

 cp2 = buf;

 while(*cp1) *cp2++ = *cp1++;

 pipe(fds);

 for (;;)  {

  write(fds[1], buf, 6);

  read(fds[0], buf, 6);

 }

}

Рисунок 5.18. Чтение из канала и запись в канал

Процесс, выполняющий программу, которая приведена на Рисунке 5.19, создает поименованный канал с именем «fifo». Если этот процесс запущен с указанием второго (формального) аргумента, он постоянно записывает в канал строку символов «hello»; будучи запущен без второго аргумента, он ведет чтение из поименованного канала. Два процесса запускаются по одной и той же программе, тайно договорившись взаимодействовать между собой через поименованный канал «fifo», но им нет необходимости быть родственными процессами.

|< Пред. 182 183 184 185 186 След. >|

Java книги

Контакты: [email protected]