Брайан Керниган - UNIX — универсальная среда программирования

Тут можно читать онлайн Брайан Керниган - UNIX — универсальная среда программирования - бесплатно ознакомительный отрывок. Жанр: comp-osnet, издательство Финансы и статистика, год 1992. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    UNIX — универсальная среда программирования
  • Автор:
  • Жанр:
  • Издательство:
    Финансы и статистика
  • Год:
    1992
  • Город:
    Москва
  • ISBN:
    5-289-00253-4
  • Рейтинг:
    5/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Брайан Керниган - UNIX — универсальная среда программирования краткое содержание

UNIX — универсальная среда программирования - описание и краткое содержание, автор Брайан Керниган, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.

Для программистов-пользователей операционной системы UNIX.

UNIX — универсальная среда программирования - читать онлайн бесплатно ознакомительный отрывок

UNIX — универсальная среда программирования - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Брайан Керниган
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Здесь представлен разумный формат с указанием автора и даты сообщения вместе с именем файла. Приведем окончательный вариант команды news:

# news: print news files, final version

PATH=/bin:/usr/bin

IFS='

' # just a newline

cd /usr/news

for i in `ls -t * $HOME/.news_time 2>&1`

do

IFS=' '

case $i in

*' not found') ;;

*/.news_time) break ;;

*) set X`ls -l $i`

echo "

$i: ($3) $5 $6 $7

"

cat $i

esac

done

touch $HOME/.news_time

Дополнительные символы перевода строк разделяют в заголовке при печати фрагменты новостей. Первым значением IFSявляется символ перевода строки, поэтому сообщение not foundиз вывода первой команды ls(если оно есть) рассматривается как один аргумент. Во втором случае переменной IFSприсваивается пробел, поэтому вывод второй команды lsразбивается на несколько аргументов.

Упражнение 5.27

Добавьте в команду news флаг -n("notify" — извещение), чтобы сообщать о новостях, но не печатать их, и не выполняйте touch .news_time. Эту команду можно поместить в ваш файл .profile.

Упражнение 5.28

Сравните предложенный здесь подход и реализацию команды news с аналогичной командой вашей системы.

5.9 Команды getи put: контроль изменении файла

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

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

Одно из решений состоит в том, чтобы хранить копии всех версий программы, но это трудно организовать и, кроме того, требует большого объема памяти на диске. Мы же будем основываться на подобии последовательных версий, что позволяет хранить только их общую часть. Команда

$ diff -е old new

порождает список команд редактора ed, преобразующих файл oldв new. Таким образом, можно хранить все версии на базе одного файла, сохраняя одну полную версию и множество команд редактирования, преобразующих ее в любую другую версию.

Существуют два очевидных решения: хранить целиком последнюю версию и иметь команды редактирования для возврата к старым версиям или хранить самую старую версию и иметь команды редактирования для перехода к новым. Хотя второе решение чуть проще запрограммировать, первое предпочтительнее, поскольку из множества версий почти всегда интереснее выбрать новые.

Мы рассмотрим первое решение. В едином файле, называемом файлом истории, хранится текущая версия, за которой следует множество команд редактирования, преобразующих каждую версию в предыдущую (т.е. более старую). Любой набор команд редактирования начинается такой строкой:

@@@ пользователь дата сводка

Сводка — это одна строка, которая вводится пользователем и описывает изменения.

Для работы с версиями используются две команды: getвыделяет версию из файла истории, a putзаносит новую версию в файл истории после запроса на ввод сводки изменений. Прежде чем привести программу, покажем, как выполняются getи putи как сохраняется файл истории:

$ echo строка текста > junk

$ put junk

Summary: создадим новый файл Введите описание

get: no file junk.H Файл-история не существует

put: creating junk.H …и put создает его

$ cat junk.H

строка текста

@@@ you Sat Oct 1 13:31:03 EDT 1983сделаем новый файл

$ echo еще строка >>junk

$ put junk

Summary: одна строка добавлена

$ cat junk.H

строка текста

еще одна строка текста

@@@ you Sat Oct 1 13:31:28 EDT 1983 одна строка добавлена

2d

@@@ you Sat Oct 1 13:31:03 EDT 1983 сделаем новый файл

$

Команды редактирования представляют собой одну строку 2, которая исключает вторую строку файла, преобразуя новую версию в исходную:

$ rm junk

$ get junk Самая новая версия

$ cat junk строка текста еще строка текста

$ get -l junk

$ cat junk Версия новейшая, но одна

строка текста

$ get junk Опять самая новая версия

$ replace еще 'другая' junkИзменим ее

$ put junk

Summary: изменена вторая строка

$ cat junk.H

строка текста

другая строка

@@@ you Sat Oct 1 13:34:07 EDT 1983 одна строка добавлена

2d

@@@ you Sat Oct 1 13:31:03 EDT 1983 создадим новый файл

$

Для получения нужной версии файла в файле истории записаны команды редактирования. Первая группа команд преобразует самую последнюю версию в предыдущую, вторая группа преобразует предыдущую в пред-предыдущую версию и т.д. Таким образом, мы преобразуем новый файл в его старую версию, запуская каждый раз редактор ed.

Очевидно, может возникнуть проблема, если в изменяемом файле есть строки, начинающиеся с трех символов. Кроме того, в разделе ошибок описания команды diff(1)(см. справочное руководство по UNIX) есть предупреждение о строках, состоящих из одной точки. Мы выбрали @@@для разделения команд редактирования, поскольку такая строка является редкостью для обычного текста.

Конечно, было бы полезно показать здесь процесс развития команд putи get, но из-за ограниченного объема книги мы приведем только их окончательные варианты. Команда putпроще команды get:

# put: install file into history

PATH=/bin:/usr/bin

case $# in

1) HIST=$1.H ;;

*) echo 'Usage: put file' 1>&2; exit 1 ;;

esac

if test ! -r $1

then

echo "put: can't open $1" 1>&2

exit 1

fi

trap 'rm -f /tmp/put.[ab]$$; exit 1' 1 2 15

echo -n 'Summary: '

read Summary

if get -o /tmp/put.a$$ $1 # previous version

then # merge pieces

cp $1 /tmp/put.b$$ # current version

echo"@@@ `getname` `date` $Summary" >>/tmp/put.b$$

diff -e $1 /tmp/put.a$$ >>/tmp/put.b$$ # latest diffs

sed -n '/^@@@/,$p' <$HIST >>/tmp/put.b$$ # old diffs

overwrite $HIST cat /tmp/put.b$$ # put it back

else # make a new one

echo "put: creating $HIST"

cp $1 $HIST

echo "@@@ `getname` `date` $Summary" >>$HIST

fi

rm -f /tmp/put.[ab]$$

После считывания одной строки сводки команда putобращается к getдля получения предыдущей версии файла из файла истории. Флаг команды getуказывает на переключение выходного файла. В том случае, когда getне может найти файл истории, она возвращает код завершения ошибки, и putсоздает файл истории. Если файл истории существует, то в командах после thenсоздается временный файл такого формата: самая последняя версия, строка @@@, команды редактора для преобразования этой версии в предыдущую, старые команды редактора и строки В конце временный файл копируется в файл истории с помощью команды overwrite.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Брайан Керниган читать все книги автора по порядку

Брайан Керниган - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




UNIX — универсальная среда программирования отзывы


Отзывы читателей о книге UNIX — универсальная среда программирования, автор: Брайан Керниган. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x