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

Интервал:

Закладка:

Сделать

$ grep for pickПопробуем другую версию

for i in "$*"

$ pick '1 2' 3

1 2 3?

$

Такая версия тоже не работает, поскольку " $*" является единым словом, которое образовано из всех аргументов, объединенных вместе с разделяющими пробелами. Но решение все-таки есть (это почти черная магия): строка трактуется особым образом интерпретатором и преобразуется в нужное число аргументов для командного файла:

$ grep for pickПопробуем третью версию

for i in "$@" '

$ pick '1 2' 3

1 2?

3?

$

Строка $@, не взятая в кавычки, идентична $*; она обрабатывается иначе, только если заключена в кавычки. Мы использовали ее в команде overwrite, чтобы сохранить аргументы для команды пользователя.

В итоге мы можем сформулировать следующие правила: $*и $@раскрываются как аргументы и снова распознаются; наличие пробелов в аргументах приводит к разбиению их на несколько аргументов;

• " $*" является единым словом, которое образовано из всех аргументов командного файла, объединенных вместе с пробелами;

• « $*» идентично аргументам, получаемым командным файлом: пробелы в аргументах игнорируются, в результате получается список слов, идентичных исходным аргументам.

Если команда pickне имеет аргументов, она, по-видимому, должна читать стандартный входной поток, поэтому можно задать

$ pick < mailinglist

вместо

$ pick `cat mailinglist`

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

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

Упражнение 5.24

Попробуйте написать программу pick, которая читает аргументы из стандартного входного потока, если ничего не задано в командной строке. Она должна правильно обрабатывать пробелы. Будет ли допустим ответ q? Если нет, то попытайтесь выполнить следующее упражнение.

Упражнение 5.25

Хотя встроенные команды интерпретатора, такие, как readи set, нельзя переключить, можно временно переключить сам интерпретатор. Прочтите в справочном руководстве раздел по sh(1), в котором описывается команда exec, и придумайте, как читать из /dev/ttyбез вызова порожденного интерпретатора. (Может оказаться полезным сначала прочитать гл. 7.)

Упражнение 5.26

( Более простое .) Используйте команду readв вашем файле .profileдля инициации TERM, а также всего, что зависит от нее, например позиции табуляции.

5.8 Команда news: служба информации пользователей

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

Обычно основная идея таких программ заключается в том, что отдельные фрагменты новостей хранятся по одному в файлах в специальном каталоге типа /usr/news. Наша команда newsсравнивает время изменения файлов в каталоге /usr/newsи вашем исходном каталоге ( .news_time). В целях отладки мы можем использовать каталог '.'как для файлов новостей, так и для news_time. Можно заменить его на /usr/news, когда программа будет готова для общего пользования:

$ cat news

# news: print news files, version 1

HOME=. # debugging only

cd . # place holder for /usr/news

for i in `ls -t * $HOME/.news_time`

do

case $i in

*/.news_time) break ;;

*) echo news: $i

esac

done

touch $HOME/.news_time

$ touch .news-time

$ touch x

$ touch y

$ news

news: y

news: x

$

Команда touchзаменяет время последней модификации файла, заданного в качестве аргумента, на настоящее время, не подвергая сам файл модификации. Для отладки мы даем только эхо имен файлов новостей, а не печатаем их. Цикл завершается при обнаружении news_time, тем самым перечисляются только файлы со свежими новостями. Заметьте, что символ *в операторе caseможет быть сопоставлен с /, что недопустимо для шаблонов имен файлов. А что будет, если news_timeне существует?

$ rm .news_time

$ news

$

Отсутствие ответа удивляет и является ошибочным. Это вызвано тем, что когда команда lsне находит файл, она выдает соответствующее сообщение в стандартный выходной поток прежде, чем вывести какую-либо информацию о существующих файлах. Такая ситуация, безусловно, ошибочна — диагностические сообщения должны передаваться в стандартный файл диагностики. Но мы можем обнаружить эту ситуацию в цикле и переключить стандартный файл диагностики на стандартный выходной поток, так что все версии будут работать одинаково. (Данная проблема решена в новой версии, но мы рассмотрели ее, чтобы проиллюстрировать, как легко устранить недоделки.)

$ cat news

# news: print news files, version 2

HOME=. # debugging only

cd . # place holder for /usr/news

IFS='

' # just a newline

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

do

case $i in

*' not found') ;;

*/.news_time) break ;;

*) echo news: $i ;;

esac

done

touch $HOME/.news_time

$ news

news: news

news: y

news: x

$

Мы должны были установить IFSравным символу конца строки, чтобы сообщение

./.news_time not found

не распознавалось как три слова.

Команда newsдолжна выводить на печать файлы новостей, а не создавать эхо их имен. Полезно знать, кто и когда послал сообщение, поэтому мы воспользуемся командами setи ls -lдля вывода заголовка перед самим сообщением:

$ ls -l news

-rwxrwxrwx 1 you 208 Oct 1 12:05 news

$ set `ls -l news`

-rwxrwxrwx: bad option(s)Что-то неправильно!

$

Это один из тех случаев, когда взаимозаменяемость программы и данных на языке shellимеет значение. Команда set"ругается", потому что ее аргумент (" -rwxrwxrwx") начинается с минуса и, следовательно, выглядит как флаг. Очевидным (хотя и неэлегантным) решением было бы предварить аргумент обычным символом:

$ set X`ls -l news`

$ echo "news: ($3) $5 $6 $7"

news: (you) Oct 1 12:05

$

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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