Главная » Статьи для тега "программы"

Хорошие файлы и хорошие фильтры

Добавлено Дата: 23 September, 2012 категория: Программирование для UNIX

Хотя  последние несколько примеров использования awk представляют собой законченные программы, часто программы awk состоят из одной двух  строк и применяются в составе конвейеров. Это справедливо для большинства фильтров – иногда задача может быть  решена при  помощи  одного  фильтра, но  чаще  приходится разбивать ее на  подзадачи, выполняемые отдельными фильтрами, и  объединять их  в конвейер. Такой подход часто называют основой UNIX-программирования. Хотя  этот  взгляд и представляется несколько однобоким, фильтры применяются в системе повсеместно, и понимание их работы стоит затраченных на это усилий.

Читать »

Другие средства подготовки документов для программ UNIX

Добавлено Дата: 19 September, 2012 категория: Программирование для UNIX

Есть и другие программы, способные помочь в подготовке документов. Команда refer(1) ищет  ссылки по  ключевым словам, вносит в документ  цитаты (внутрь строк) и организует раздел ссылок в конце доку мента. Определив соответствующие макросы, можно добиться, чтобы  refer выводила ссылки именно так, как вам  нужно. Уже  существуют готовые определения для ряда компьютерных журналов. Команда re– fer входит в седьмую версию, но не включена в состав  некоторых других версий системы.

Читать »

Сигналы и прерывания в системе UNIX

Добавлено Дата: 16 September, 2012 категория: Программирование для UNIX

В этом  разделе поэтапно рассмотрим процесс обработки сигналов (таких как прерывания), поступающих из внешнего мира, а также ошибок программы. Ошибки программ возникают в основном из-за непра-

вильных обращений к памяти, при  выполнении специфических инст рукций или  из-за  операций с плавающей точкой. Наиболее  распространенные сигналы,  поступающие из  внешнего мира:  прерывание (interrupt)  –  этот  сигнал посылается, когда вы  нажимаете  клавишу DEL;  выход (quit)– порождается  символом  FS  (ctl-\);  отключение (hangup) – вызван тем, что повешена телефонная трубка, и завершение (terminate) –  порождается  командой  kill. Когда  происходит одно  из вышеуказанных  событий, сигнал посылается  всем  процессам, запу щенным с данного терминала, и если не существует соглашений, пред писывающих иное, сигнал завершает процесс. Для  большинства сигналов создается  дамп  памяти, который может потребоваться  для  отладки. (См. adb(1) и sdb(l).)

Читать »

Зачем нужна программируемая оболочка?

Добавлено Дата: 12 September, 2012 категория: Программирование для UNIX

Оболочка UNIX  не является типичным примером командного процессора:  хотя она  и  позволяет запускать программы привычным  способом,  но,  будучи языком  программирования, она  способна и на  большее. Давайте ненадолго вернемся назад к тому, что уже  было описано. Это стоит  сделать,  во-первых, потому что  в этой  главе  представлено очень  много  материала, а во-вторых, потому что,  пообещав рассказать  о «наиболее часто  используемых свойствах оболочки», авторы посвятили 30  страниц примерам программирования в оболочке. Но дело  в том,  что  используя оболочку, вы  все  время пишете маленькие однострочные программы: конвейер – это программа, такая же как и при-

Читать »

Повседневная работа: файлы и основные команды

Добавлено Дата: 6 September, 2012 категория: Программирование для UNIX

Информация в  системе UNIX   хранится  в  файлах,  которые по  сути  своей  очень  похожи  на  обычные офисные папки  для документов. У каждого файла есть  имя, содержимое, место для хранения и некоторая  административная информация о его владельце и размере. Файл

Читать »

Аргументы и параметры команд UNIX

Добавлено Дата: 4 September, 2012 категория: Программирование для UNIX

Большинство программ оболочки интерпретируют аргументы, поэтому когда команда запускается, можно указать, например, имена фай лов и параметры (хотя некоторые команды, например nu, успешно работают  и без аргументов).

Предположим, что требуется создать программу cx, которая изменяла бы код прав  доступа к файлу на исполняемый, таким образом,

Читать »

Доступ к окружению UNIX

Добавлено Дата: 4 September, 2012 категория: Программирование для UNIX

Из  программы, написанной на Си,  легко получить доступ  к переменным окружения оболочки, это обстоятельство позволяет адаптировать программы к  окружению, не  требуя  многого от  их  пользователей. Предположим, что  используется терминал,  экран которого больше, чем обычные 24 строки. Что делать, если надо выполнить программу p и при  этом хочется воспользоваться возможностями терминала? Ука зывать размер экрана при каждом запуске p слишком утомительно:

Читать »

Об ошибках и отладке UNIX

Добавлено Дата: 3 September, 2012 категория: Программирование для UNIX

Каждому, кто хоть раз пытался написать программу, знакомо понятие

«баг»   (ошибка). Единственное,  что  можно  сделать, чтобы  написать программу без ошибок, – это выбрать простую, без излишеств конструкцию, аккуратно ее реализовать и сохранять ее простой по ходу любых изменений.

Читать »

Стандартный ввод и вывод: vis

Добавлено Дата: 31 August, 2012 категория: Программирование для UNIX

Многие  программы читают только с одного входа и пишут на один выход;  для  таких  программ вполне достаточно устройств  стандартного ввода-вывода, и этого почти всегда хватает для начала.

Рассмотрим программу vis,  которая копирует  стандартный ввод  на стандартный вывод, при этом все непечатаемые символы выводятся в виде  \nnn, где nnn – восьмеричное значение символа. Эта программа незаменима для  обнаружения странных или  нежелательных  симво лов,  попавших в файлы. Например, каждый символ возврата на одну позицию vis выведет как \010 (это восьмеричное значение символа):

Читать »

Отслеживание изменений файла: get и put

Добавлено Дата: 30 August, 2012 категория: Программирование для UNIX

В этом разделе, завершающем длинную главу, будет обсуждаться большой  и более  сложный, чем  рассмотренные ранее, пример, иллюстрирующий взаимодействие оболочки с программами awk и sed.

Программа развивается по мере исправления ошибок и добавления новых  возможностей. Бывает удобно  отслеживать эти  версии, особенно если с ними работают на других машинах. Пользователи вполне могут  спросить: «Что  изменилось с тех  пор, как мы получили эту версию?» или: «Как исправлена такая-то ошибка?» К тому  же  при  наличии резервной копии применение новых идей  будет  более безопасным: если  что-то  не заработает, можно безболезненно вернуться к исходной программе.

Читать »

Программирование с использованием стандартного ввода−вывода

Добавлено Дата: 26 August, 2012 категория: Программирование для UNIX

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

Читать »

Процессы UNIX

Добавлено Дата: 22 August, 2012 категория: Программирование для UNIX

Оболочка осуществляет немало других операций помимо организации конвейеров. Давайте ненадолго обратимся к основам одновременного выполнения нескольких программ, о котором упоминалось в предыдущем  разделе. Например, можно запустить две программы в одной  командной строке, разделив их  точкой  с  запятой; оболочка распознает точку с запятой и разбивает строку на две команды:

Читать »

Интерактивная программа сравнения файлов: idiff

Добавлено Дата: 22 August, 2012 категория: Программирование для UNIX

Часто бывает так, что в наличии имеются две версии файла, в чем-то  различных, при  этом каждая версия содержит часть  искомого файла. Обычно так случается, когда два пользователя вносят изменения неза висимо друг  от друга. Программа diff может рассказать, чем отличаются  файлы, но не поможет, если надо выбрать что-то  из первого фай ла, а что-то – из второго.

Читать »

Процессы в системе UNIX

Добавлено Дата: 21 August, 2012 категория: Программирование для UNIX

Этот  раздел описывает выполнение одной  программы из  другой. Самый  простой способ  сделать это –  обратиться к стандартной библиотечной функции system, описанной, но осужденной в главе 6. Команда system получает один  аргумент – командную строку точно  в том виде,  как она  набрана на  терминале (за  исключением символа новой  строки в конце), и выполняет ее в подоболочке. Если  командная строка должна быть составлена из нескольких частей, то могут  пригодиться   возможности   форматирования  в   памяти,  которыми   обладает sprintf. В конце данного раздела будет представлена более  надежная версия system  для  использования в  интерактивных  программах, но сначала надо исследовать части, из которых она состоит.

Читать »

Препроцессоры tbl и eqn

Добавлено Дата: 20 August, 2012 категория: Программирование для UNIX

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

Читать »