1.3.3 Элементы конструкционных блоков

1.3.3 Элементы конструкционных блоков

Как уже говорилось ранее, концепция разработки системы UNIX заключалась в построении операционной системы из элементов, которые позволили бы пользователю создавать небольшие программные модули, выступающие в качестве конструкционных блоков при создании более сложных программ. Одним из таких элементов, с которым часто сталкиваются пользователи при работе с командным процессором shell, является возможность переназначения ввода-вывода. Говоря условно, процессы имеют доступ к трем файлам: они читают из файла стандартного ввода, записывают в файл стандартного вывода и выводят сообщения об ошибках в стандартный файл ошибок. Процессы, запускаемые с терминала, обычно используют терминал вместо всех этих трех файлов, однако каждый файл независимо от других может быть «переназначен». Например, команда

ls

выводит список всех файлов текущего каталога на устройство (в файл) стандартного вывода, а команда

ls › output

переназначает выводной поток со стандартного вывода в файл «output» в текущем каталоге, используя вышеупомянутый системный вызов creat. Подобным же образом, команда

mail mjb ‹ letter

открывает (с помощью системного вызова open) файл «letter» в качестве файла стандартного ввода и пересылает его содержимое пользователю с именем «mjb». Процессы могут переназначать одновременно и ввод, и вывод, как, например, в командной строке:

nroff -mm ‹ doc1 › doc1.out 2› errors

где программа форматирования nroff читает вводной файл doc1, в качестве файла стандартного вывода задает файл doc1.out и выводит сообщения об ошибках в файл errors («2›» означает переназначение вывода, предназначавшегося для файла с дескриптором 2, который соответствует стандартному файлу ошибок). Программы ls, mail и nroff не знают, какие файлы выбраны в качестве файлов стандартного ввода, стандартного вывода и записи сообщений об ошибках; командный процессор shell сам распознает символы «‹», «›» и «2›» и назначает в соответствии с их указанием файлы для стандартного ввода, стандартного вывода и записи сообщений об ошибках непосредственно перед запуском процессов.

Вторым конструкционным элементом является канал, механизм, обеспечивающий информационный обмен между процессами, выполнение которых связано с операциями чтения и записи. Процессы могут переназначать выводной поток со стандартного вывода на канал для чтения с него другими процессами, переназначившими на канал свой стандартный ввод. Данные, посылаемые в канал первыми процессами, являются входными для вторых процессов. Вторые процессы так же могут переназначить свой выводной поток и так далее, в зависимости от пожеланий программиста. И снова, так же как и в вышеуказанном случае, процессам нет необходимости знать, какого типа файл используется в качестве файла стандартного вывода; их выполнение не зависит от того, будет ли файлом стандартного вывода обычный файл, канал или устройство. В процессе построения больших и сложных программ из конструкционных элементов меньшего размера программисты часто используют каналы и переназначение ввода-вывода при сборке и соединении отдельных частей. И действительно, такой стиль программирования находит поддержку в системе, благодаря чему новые программы могут работать вместе с существующими программами.

Например, программа grep производит поиск контекста в наборе файлов (являющихся параметрами программы) по следующему образцу:

grep main a.c b.c c.c

где «main» — подстрока, поиск которой производится в файлах a.c, b.c и c.c с выдачей в файл стандартного вывода тех строк, в которых она содержится. Содержимое выводного файла может быть следующим:

a. c: main(argc,argv)

c. c: /* here is the main loop in the program */

c. c: main()

Программа wc с необязательным параметром -l подсчитывает число строк в файле стандартного ввода. Командная строка

grep main a.c b.c c.c | wc -l

вызовет подсчет числа строк в указанных файлах, где будет обнаружена подстрока «main»; выводной поток команды grep поступит непосредственно на вход команды wc. Для предыдущего примера результат будет такой:

3

Использование каналов зачастую делает ненужным создание временных файлов.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

4.7 ВЫДЕЛЕНИЕ ДИСКОВЫХ БЛОКОВ

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

4.7 ВЫДЕЛЕНИЕ ДИСКОВЫХ БЛОКОВ Когда процесс записывает данные в файл, ядро должно выделять из файловой системы дисковые блоки под информационные блоки прямой адресации и иногда под блоки косвенной адресации. Суперблок файловой системы содержит массив, используемый для


Роль компоновочных блоков .NET

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Роль компоновочных блоков .NET Приложения .NET строятся путем связывания произвольного числа компоновочных блоков. С точки зрения упрощенного подхода компоновочный блок является двоичным файлом, включающим свое описание, снабженным номером версии и поддерживаемым средой


Редактор блоков

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

Редактор блоков Редактор блоков вызывается командой BEDIT из падающего меню Tools ? Block Editor или щелчком кнопки мыши на пиктограмме Block Editor на стандартной панели инструментов. При этом сначала загружается диалоговое окно редактирования описания блока Edit Block Definition (рис. 10.6), в


§ 2.3 Элементы описания книги. Базовые структурные элементы

Из книги Создание электронных книг в формате FictionBook 2.1: практическое руководство [Release 1.01 от 28.II.2010 г.] автора Кондратович Михаил Иосифович

§ 2.3 Элементы описания книги. Базовые структурные элементы В самом начале любого файла книги идет признак формата XML<?xml version="1.0" encoding="windows-1251"?>Здесь указана сигнатура принадлежности к формату XML, его версия и кодировка файла. Для русскоязычных FictionBook это обычно windows-1251


§ 2.4 Элементы описания книги (description). Элементы первого уровня

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

§ 2.4 Элементы описания книги (description). Элементы первого уровня Элемент title-infoСодержит базовую информацию о книге (заголовок, информация об авторе и переводчике, аннотация, вхождение в серию и т.д.)Cинтаксис: <title-info>content</title-info>.Используется в элементах: descriptionВложенные


§ 2.5 Элементы описания книги (description). Элементы второго уровня

Из книги AutoCAD 2009. Учебный курс автора Соколова Татьяна Юрьевна

§ 2.5 Элементы описания книги (description). Элементы второго уровня Элемент genreЖанр произведения.Содержимое элемента строго фиксировано и определяется файлом FictionBookGenres.xsd, входящим в состав спецификации FictionBook.Список жанров с переводом приведен в Приложении В.Cинтаксис:


§ 2.6 Элементы описания книги (description). Элементы третьего уровня (информация об авторе)

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

§ 2.6 Элементы описания книги (description). Элементы третьего уровня (информация об авторе) Элемент first-nameИмя автора книги или документа, а также переводчика.Cинтаксис: <first-name>текст</first-name>Используется в элементах: author, translatorВложенные элементы: нетКоличество вхождений:


§ 2.8 Элементы раздела книги (section). Элементы первого уровня.

Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь

§ 2.8 Элементы раздела книги (section). Элементы первого уровня. Элемент citeЦитата. Отрывок текста из другого произведения.В FictionBook с помощью тэга cite также выделяются письма, записки, надписи, списки и еще много чего.Cинтаксис: <cite>content</cite>Используется в элементах: section,


§ 2.9 Элементы раздела книги (section). Элементы второго уровня.

Из книги автора

§ 2.9 Элементы раздела книги (section). Элементы второго уровня. Элемент stanzaСтрофа стихотворения.Cинтаксис: stanza>content</stanza>Используется в элементах: poemВложенные элементы: title, subtitle, vКоличество вхождений: одно и болееАтрибуты: нетВерсия формата: 2.0Пример: см. пример


§ 2.11 Элементы абзаца (стилевые, они же inline элементы)

Из книги автора

§ 2.11 Элементы абзаца (стилевые, они же inline элементы) Элемент aСсылка или сноска.Cинтаксис: <a>content</a>Используется в элементах: code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, vВложенные элементы:     code, emphasis, strikethrough, strong, style, sub, sup, imageКоличество вхождений:


Трансформация текстовых блоков

Из книги автора

Трансформация текстовых блоков Мы можем применять к текстовым блокам те же трансформации, что и к другим фрагментам изображения. Делается это точно так же — выделяем нужный текстовый блок, выбираем в главном инструментарии инструмент "трансформатор" и перемещаем


Редактор блоков

Из книги автора

Редактор блоков Редактор блоков вызывается командой BEDIT из падающего меню Tools ? Block Editor или щелчком на пиктограмме Block Editor на стандартной панели инструментов. При этом сначала загружается диалоговое окно редактирования описания блока Edit Block Definition (рис. 10.17), в котором


Палитры вариаций блоков

Из книги автора

Палитры вариаций блоков Загрузка палитр вариаций блоков Block Authoring Palettes осуществляется из редактора блоков щелчком на инструменте Authoring Palettes. Палитры содержат следующие вкладки.Вкладка Parameters включает набор инструментов для определения параметров (рис. 10.20). Рис. 10.20.


Редактор блоков

Из книги автора

Редактор блоков Редактор блоков вызывается командой BEDIT из падающего меню Tools ? Block Editor или щелчком на пиктограмме Block Editor на стандартной панели инструментов. При этом сначала загружается диалоговое окно редактирования описания блока Edit Block Definition (рис. 10.5), в котором


Элементы для форматирования больших блоков текста

Из книги автора

Элементы для форматирования больших блоков текста Элементы, которые мы рассмотрим в этом подразделе, позволяют форматировать большие блоки текста. Они определяют параметры отображения и расположения текста, заключенного в их блок.Начнем рассмотрение с элемента,


Смещение блоков

Из книги автора

Смещение блоков Говорится, что элементу была присвоена позиция, если для свойства position устанавливается значение, отличное от static. Позиционированные элементы порождают позиционированные блоки, положение которых регулируется с помощью следующих четырех свойств.• top –