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

Здесь есть возможность читать онлайн «Брайан Керниган - UNIX — универсальная среда программирования» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 1992, ISBN: 1992, Издательство: Финансы и статистика, Жанр: ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

UNIX — универсальная среда программирования: краткое содержание, описание и аннотация

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

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «UNIX — универсальная среда программирования», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Почему бы в отсутствие аргументов просто не читать стандартный входной поток? Рассмотрим вторую версию команды zapиз разд. 5.6:

kill $SIG `pick\`ps-ag | egrep "$*"\` | awk '{print $1}'`

Что происходит, если шаблон egrepни с чем не совпадает? В этом случае pickне имеет аргументов и читает свой стандартный входной поток; команда zapтерпит неудачу загадочным образом. Требование явного аргумента простой способ устранить неоднозначность, и соглашение о '-'в catи других программах показывает, как его определить.

/* pick: offer choice on each argument */

#include

char *progname; /* program name for error message */

main(argc, argv)

int argc;

char *argv[];

{

int i;

char buf[BUFSIZ];

progname = argv[0];

if (argc == 2 && strcmp(argv[1], "-") == 0) /* pick - */

while (fgets(buf, sizeof buf, stdin) != NULL) {

buf[strlen(buf)-1] = '\0'; /* drop newline */

pick(buf);

}

else

for (i = 1; i < argc; i++)

pick(argv[i]);

exit(0);

}

pick(s) /* offer choice of s */

char *s;

{

fprintf(stderr, "%s? ", s);

if (ttyin() == 'y')

printf("%s\n", s);

}

Версия pickпредоставляет возможность диалогового выбора аргументов в одной программе. Это не только обеспечивает полезное средство, но и уменьшает потребность в "интерактивных" флагах для других команд.

Упражнение 6.10

Если есть pick, существует ли необходимость в rm -i?

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

Если вы писали программы ранее, вам знакомо понятие ошибки. Однако важно не только создавать программы, свободные от ошибок, но и заботиться о том, чтобы ваш проект был прост, тщательно реализован и сохранял свою "чистоту" в процессе модификации.

В UNIX много инструментов, которые помогут вам находить ошибки, хотя ни один из них не является действительно первоклассным. Для того чтобы продемонстрировать их, нам нужна ошибка; все же программы в этой книге совершенны. Поэтому мы "создадим" типичную ошибку. Рассмотрим приведенную выше функцию pick, но на сей раз с ошибкой (заглядывать в первоначальный вариант нечестно):

pick(s) /* offer choice of s */

char *s;

{

fprintf("%s? ", s);

if (ttyin() == 'y')

printf("%s\n", s);

}

Что произойдет, если мы откомпилируем и запустим ее?

$ сс pick.с -о pick

$ pick *.с Попробуем

Ошибка при обращении к памяти - сделан дампКатастрофа!

$

Сообщение "Ошибка при обращении к памяти" свидетельствует о том, что ваша программа пыталась работать с недозволенной областью памяти. Обычно в таком случае указатель содержит неправильное значение. "Ошибка адресации шины" другое диагностическое сообщение со сходным значением, часто обусловленное просмотром бесконечной строки. "Сделан дамп памяти" означает, что ядро сохранило состояние вашей выполняемой программы в файле coreтекущего справочника. Вы также можете заставить программу сделать дамп памяти, напечатав ctl-\ , если она выполняется как фоновая, или с помощью команды kill -3, если она основная.

Существуют две программы adbи sdb, назначение которых разбираться в "посмертной выдаче". Подобно большинству отладчиков, они "хитроумны", сложны и без них трудно обойтись. Программа adbесть в седьмой версии системы, a sdbдоступна в более поздних версиях.

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

Чтобы получить распечатку стека с помощью adb, нужно ввести команду $C :

$ adb pick coreВызывает adb

$C Запрос содержимого стека

~_strout(0175722,011,0,011200)

adjust: 0

fillch: 060542

__doprnt(0177345,0176176,011200)

~fprintf(011200,0177345)

iop: 01120

fmt: 0177345

args: 0

~pick(0177345)

s: 0177345

~main(035,0177234)

argc: 035

argv: 0177234

i: 01

buf: 0

ctl-d Завершение

$

Здесь речь идет о том, что mainбыла вызвана из pick, которая вызвала fprintf, а она в свою очередь вызвала __doprnt, вызвавшую _strout. Так как __doprntне упомянута где-либо в pick.с, ошибка должна быть где-то в fprintfили выше. (Строки после каждой функции в распечатке показывают значения локальных переменных. подавляет данную информацию так же, как сама делает это в некоторых версиях adb.) Попытаемся теперь сделать то же самое с помощью sdb:

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

Интервал:

Закладка:

Сделать

Похожие книги на «UNIX — универсальная среда программирования»

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


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

Обсуждение, отзывы о книге «UNIX — универсальная среда программирования» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x