Каналы и файлы FIFO — это элементы системы, представляющие потоки, функционирующие по принципу «первым вошел, первым вышел». Их основные отличия между собой заключаются в методе создания. Файл FIFO создается путем вызова mknod, после чего он может открываться и использоваться любым процессом, знающим его имя и обладающим соответствующими полномочиями.
Также может иметь смысл заглянуть на сайт eco-sklad.ru, ведь именно там можно узнать много нового на тему http://www.eco-sklad.ru/index.php?id=27. Тема экспертиза стеллажей может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт eco-sklad.ru, и тема экспертиза стеллажей начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема экспертиза стеллажей очень подробно представлена на сайте eco-sklad.ru. Трудно найти более детальное освещение темы экспертиза стеллажей чем это сделано на сайте eco-sklad.ru. Спасибо сайту eco-sklad.ru за такое доскональное преподнесение темы экспертиза стеллажей.
Он продолжает существовать до тех пор, пока не будет удален принудительно. Канал создается вызовом pipe, который возвращает дескрипторы чтения и записи. Процесс, создавший канал,
имеет возможность передавать эти дескрипторы своим потомкам через вызов fork, таким образом разделяя между ними канал. У одного канала может быть несколько получателей и отправителей данных.1 После того как у канала не остается ни одного активного читающего или пишущего процесса, ядро автоматически удаляет его.
Операции ввода-вывода для файлов FIFO и канал очень схожи. Одни процессы добавляют данные в конец элемента, в то время как процессы-получатели извлекают данные из его начала. После прочтения данных происходит их удаление из конвейера, после чего канал оказывается недоступным даже для других получателей. Ядром определен параметр PIPE_BUF (равный по умолчанию 5 120 байт), который ограничивает объем данных, хранящихся внутри конвейера. Если запись информации приводит к переполнению файла FIFO или канала, читающий процесс будет заблокирован до тех пор, пока из элемента не будет удалено достаточное количество данных (при помощи их считывания). Если процесс попытается за один прием произвести запись данных большего объема, чем значение PIPE_BUF, ядро не сумеет гарантировать неделимость операции записи. В этом случае данные могут оказаться перемешаны с информацией, записанной другими процессами.
Чтение из файла FIFO отличается немногим.
Если запрашиваемый размер данных оказывается большим, чем текущий объем элемента, ядро прочтет тот объем информации, который содержится в нем, и возвратит процессу количество считанных байтов. Если элемент в текущий момент не содержит данных, читающий процесс будет заблокирован до тех пор, пока другой процесс не произведет запись в канал. Флаг
0_NDELAY
(устанавливаемый через вызов open для файлов FIFO или fcntl) изменяет режим работы канала или файла FIFO на неблокирующий. В этом случае чтение и запись завершатся в любом случае без приостановки работы процессов, при этом будет передано максимально возможное количество данных.
Канал поддерживают счетчики количества текущих читающих и пишущих процессов. После того как последний пишущий закроет канал, ядро системы разбудит все ожидающие процессы, которые смогут прочесть данные, оставшиеся в канале. После освобождения канала они получат при очередном вызове read значение 0, что будет интерпретировано ими как конец файла. После того как последний процесс-получатель закроет канал, ядро пошлет сигнал SIGPIPE всем заблокированным процессам-отправителям. Все последующие вызовы write для этого канала возвратятся с ошибкой EPIPE.
Изначальная реализация каналов использовала файловую систему. Каждому каналу присваивался индексный дескриптор и список блокировки.
Во многих вариантах системы BSD для реализации каналов были использованы сокеты (см. раздел 17.10.3). В ОС SVR4 каналы и файлы FIFO построены на STREAMS. Более подробно о них вы прочтете в разделе 17.9. Каналы в SVR4 являются двунаправленными. Они поддерживают отдельные потоки данных, передаваемые в каждом направлении. Такой вариант более подходит для большинства приложений, требующих полнодуплексного механизма взаимодействия процессов.
Опубликовал katy
July 08 2015 08:23:37 ·
0 Комментариев ·
3228 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.