4.11. Ограничения программных каналов и FIFO
4.11. Ограничения программных каналов и FIFO
На программные каналы и каналы FIFO системой накладываются всего два ограничения:
? OPEN_MAX — максимальное количество дескрипторов, которые могут быть одновременно открыты некоторым процессом (Posix устанавливает для этой величины ограничение снизу — 16);
? PIPE_BUF — максимальное количество данных, для которого гарантируется атомарность операции записи (описано в разделе 4.7; Posix требует по меньшей мере 512 байт).
Значение OPEN_MAX можно узнать, вызвав функцию sysconf, как мы вскоре покажем. Обычно его можно изменить из интерпретатора команд с помощью команды ulimit (в Bourne shell и KornShell, как мы вскоре покажем) или с помощью команды limit (в С shell). Оно может быть изменено и самим процессом с помощью вызова функции setrlimit (подробно описана в разделе 7.11 [21]).
Значение PIPE_BUF обычно определено в заголовочном файле <limits.h>, но с точки зрения стандарта Posix оно представляет собой переменную, зависимую от полного имени файла. Это означает, что ее значение может меняться в зависимости от указываемого имени файла (для FIFO, поскольку каналы имен не имеют), поскольку разные имена могут относиться к разным файловым системам и эти файловые системы могут иметь различные характеристики. Это значение можно получить в момент выполнения пpoгрaммы, вызвав либо pathconf, либо fpathconf. В листинге 4.17 приведен пример, выводящий текущее значение этих двух oгрaничeний.
Листинг 4.17. Определение значений PIPE_BUF и OPEN_MAX во время выполнения
//pipe/pipeconf.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 if (argc != 2)
6 err_quit("usage: pipeconf <pathname>");
7 printf("PIPE_BUF = %ld. OPEN_MAX = %ld ",
8 Pathconf(argv[1], _PC_PIPE_BUF), Sysconf(_SC_OPEN_MAX));
9 exit(0);
10 }
Вот несколько примеров, в которых указываются имена файлов, относящиеся к различным файловым системам:
solaris % pipeconf / значения по умолчанию в Solaris 2.6
PIPE_BUF = 5120, OPEN_MAX = 64
solaris % pipeconf /home
PIPE_BUF = 5120, OPEN_MAX = 64
solaris % pipeconf /tmp
PIPE_BUF = 5120, OPEN_MAX = 64
alpha % pipeconf / значения по умолчанию в Digital Unix 4.0B
PIPE_BUF = 4096, OPEN_MAX = 4096
alpha % pipeconf /usr
PIPE_BUF = 4096, OPEN_MAX = 4096
Покажем теперь, как изменить значение OPEN_MAX в Solaris, используя интерпретатор KornShell:
solaris % ulimit –nS отображение максимального количества дескрипторов, мягкоео граничение
64
solaris % ulimit –Nh отображение максимального количества дескрипторов, жесткое ограничение
1024
solaris % ulimit –nS 512 установка мягкого ограничения в 512
solaris % pipeconf / проверка внесенных изменений
PIPE_BUF = 5120, OPEN_MAX = 512
ПРИМЕЧАНИЕ
Хотя значение PIPE_BUF для FIFO, в принципе, может меняться в зависимости от файловой системы, к которой относится файл, на самом деле это очень редкий случай.
В главе 2 [21] описаны функции fpathconf, pathconf и sysconf, которые предоставляют информацию о некоторых ограничениях ядра во время выполнения программы. Стандарт Posix.1 определяет 12 констант, начинающихся с _РС_, и 52, начинающихся с _SC_. Системы Digital Unix 4.0B и Solaris 2.6 расширяют последнее ограничение, определяя около 100 констант, значения которых могут быть получены в момент выполнения программы с помощью sysconf.
Команда getconf определяется стандартом Posix.2 и выводит значения большинства этих ограничений. Например:
alpha % getconf OPEN_MAX
4096
alpha % getconf PIPE_BUF /
4096
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
9.3. Базовое межпроцессное взаимодействие: каналы и очереди FIFO
9.3. Базовое межпроцессное взаимодействие: каналы и очереди FIFO Межпроцессное взаимодействие (Interprocess communication — IPC) соответствует своему названию: это способ взаимодействия для двух отдельных процессов. Самым старым способом IPC на системах Unix является канал (pipe):
9.4.3.4. Неблокирующий ввод/вывод для каналов и FIFO
9.4.3.4. Неблокирующий ввод/вывод для каналов и FIFO Ранее для описания способа работы каналов мы использовали сравнение с двумя людьми, моющими и вытирающими тарелки с использованием сушилки; когда сушилка заполняется, останавливается моющий, а когда она пустеет,
Глава 23 Будущее программных продуктов
Глава 23 Будущее программных продуктов Напрашивается закономерный вопрос: «Какие технологии помогут созданию продуктов, обеспечивающих безопасность, в будущем?» Конечно, криптография постоянно улучшается. Несомненно, мы все лучше и лучше проектируем брандмауэры. Будет
FIFO
FIFO Название каналов FIFO происходит от выражения First In First Out (первый вошел — первый вышел). FIFO очень похожи на каналы, поскольку являются однонаправленным средством передачи данных, причем чтение данных происходит в порядке их записи. Однако в отличие от программных
26.3. Каналы типа FIFO
26.3. Каналы типа FIFO Канал FIFO — это канал, основанный на принципе очереди: «первым вошел, первым вышел». От обычного канала канал FIFO отличается следующим:? Канал FIFO сохраняется в файловой системе в виде файла, поэтому каналы FIFO называются именованными.? С именованным
4.6. Именованные каналы (FIFO)
4.6. Именованные каналы (FIFO) Программные каналы не имеют имен, и их главным недостатком является невозможность передачи информации между неродственными процессами. Два неродственных процесса не могут создать канал для связи между собой (если не передавать
Атомарность записи в FIFO
Атомарность записи в FIFO Наша простейшая пара клиент-сервер позволяет наглядно показать важность наличия свойства атомарности записи в пpoгрaммныe каналы и FIFO. Предположим, что два клиента посылают серверу запрос приблизительно в один и тот же момент. Первый клиент
FIFO и NFS
FIFO и NFS Каналы FIFO представляют собой вид IPC, который может использоваться только в пределах одного узла. Хотя FIFO и обладают именами в файловой системе, они могут применяться только в локальных файловых системах, но не в присоединенных сетевых (NFS).solaris % mkfifo
10.14. Реализация с использованием FIFO
10.14. Реализация с использованием FIFO Займемся реализацией именованных семафоров Posix с помощью каналов FIFO. Именованный семафор реализуется как канал FIFO с конкретным именем. Неотрицательное количество байтов в канале соответствует текущему значению семафора. Функция sem_post
5.4.5. Каналы FIFO
5.4.5. Каналы FIFO Файл FIFO (First-In, First-Out — первым пришел, первым обслужен) — это канал, у которого есть имя в файловой системе. Любой процесс может открыть и закрыть такой файл. Процессы, находящиеся на противоположных концах канала, не обязаны быть связанными друг с другом.
Автоматизированное внедрение программных продуктов
Автоматизированное внедрение программных продуктов Методология ASAP — это классический пример CASE-среды, которая направлена на ускорение проекта внедрения с помощью опыта, накопленного за время предыдущих проектов SAP, и нацелена на дальнейший прогресс в этом направлении.
1.5. ОСОБЕННОСТИ ПРОГРАММНЫХ РАЗРАБОТОК
1.5. ОСОБЕННОСТИ ПРОГРАММНЫХ РАЗРАБОТОК Томас Кун в 1977 г. определил термин «парадигма» как свод норм научного мышления. Парадигма — это правило (modus operandi) развития научного знания. Оно в течение определенного времени дает научному сообществу модель постановки проблем и их