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. Буферирование каналов
Каналы буферируют свои данные, что означает, что записанные в канал данные хранятся ядром до тех пор, пока не будут прочитаны. Однако, канал может содержать лишь такое-то количество записанных, но еще не прочитанных данных. Мы можем называть записывающий процесс производителем, а читающий процесс потребителем. Как система управляет полными и пустыми каналами?
Когда канал полон, система автоматически блокирует производителя в следующий раз, когда он пытается осуществить запись данных в канал с помощью
Подобным же образом, если канал пустой, потребитель блокируется в
Феномен Солженицына
Документальная литература:
биографии и мемуары
рейтинг книги
Бандит
1. Петр Синельников
Фантастика:
фэнтези
рейтинг книги
Стеллар. Компиляция. Книги 1-9
Стеллар
Фантастика:
киберпанк
рпг
постапокалипсис
технофэнтези
рейтинг книги
Черный Баламут. Трилогия
Черный Баламут
Фантастика:
героическая фантастика
рейтинг книги
Уиронда. Другая темнота (сборник)
Фантастика:
ужасы и мистика
рейтинг книги
Париж в 1814-1848 годах. Повседневная жизнь
Культура повседневности
Научно-образовательная:
история
культурология
рейтинг книги
Жизнь и приключения Мартина Чезлвита
Проза:
классическая проза
рейтинг книги
Легенды российских тамплиеров
Религия и эзотерика:
эзотерика
рейтинг книги
Избранник Небес
Фантастика:
ужасы и мистика
рейтинг книги
Юся и эльф
Фантастика:
юмористическое фэнтези
детективная фантастика
рейтинг книги
Аргонавты
Старинная литература:
мифы. легенды. эпос
рейтинг книги
Боги и человек (статьи)
Научно-образовательная:
культурология
рейтинг книги