Linux программирование в примерах
Шрифт:
9.3.1.1. Создание каналов
Системный вызов
Значение аргумента является адресом массива из двух элементов целого типа,
Если вызов был успешным, у процесса теперь есть два дополнительных открытых дескриптора файла. Значение
Как упоминалось, данные, записанные в записываемый конец, считываются из читаемого конца. После завершения работы с каналом оба конца закрываются с помощью вызова
Строки 11–15 объявляют локальные переменные; наибольший интерес представляет
Строки 17–21 создают канал с проверкой ошибок; строки 23–24 выводят значения новых дескрипторов файлов (просто для подтверждения, что они не равны 0, 1 или 2)
В строке 26 получают длину сообщения для использования с
Строки 33–37 считывают содержимое канала, опять с проверкой ошибок. Строка 39 предоставляет завершающий нулевой байт, так что прочитанные данные могут использоваться в качестве обычной строки. Строка 41 выводит данные, а строки 42–43 закрывают оба конца канала. Вот что происходит при запуске программы:
Эта программа не делает ничего полезного, но она демонстрирует основы. Обратите внимание, что нет вызовов
95
Мы уверены, что вы не волновались. В конце концов, вы, возможно, используете конвейеры из оболочки десятки раз в день — Примеч. автора.
Подобно другим дескрипторам файлов, дескрипторы для каналов наследуются порожденным процессом после
9.3.1.2. Буферирование каналов
Каналы буферируют свои данные, что означает, что записанные в канал данные хранятся ядром до тех пор, пока не будут прочитаны. Однако, канал может содержать лишь такое-то количество записанных, но еще не прочитанных данных. Мы можем называть записывающий процесс производителем, а читающий процесс потребителем. Как система управляет полными и пустыми каналами?
Когда канал полон, система автоматически блокирует производителя в следующий раз, когда он пытается осуществить запись данных в канал с помощью
Подобным же образом, если канал пустой, потребитель блокируется в
Император
Проза:
историческая проза
рейтинг книги
Пиччинино
Приключения:
исторические приключения
рейтинг книги
Отряд
Отряд тайных дел
Фантастика:
фэнтези
боевая фантастика
рейтинг книги
Газлайтер. Том 31
31. История Телепата
Фантастика:
боевая фантастика
попаданцы
альтернативная история
фэнтези
рейтинг книги
Язык программирования Си. Издание 3-е, исправленное
Компьютеры и Интернет:
программирование
рейтинг книги
Собрание сочинений
Детские:
прочая детская литература
рейтинг книги