Приложение I. Упражнения
Приложение I. Упражнения
I.1. Анализ сценариев
Просмотрите следующие сценарии. Попробуйте запустить их, затем объясните -- что они делают. Расставьте комментарии, затем попробуйте записать их в более компактном виде.
#!/bin/bash
MAX=10000
for((nr=1; nr<$MAX; nr++))
do
let "t1 = nr % 5"
if [ "$t1" -ne 3 ]
then
continue
fi
let "t2 = nr % 7"
if [ "$t2" -ne 4 ]
then
continue
fi
let "t3 = nr % 9"
if [ "$t3" -ne 5 ]
then
continue
fi
break # Что произойдет, если закомментировать эту строку? Почему?
done
echo "Число = $nr"
exit 0
---
Читатель прислал следующий кусок кода.
while read LINE
do
echo $LINE
done < `tail -f /var/log/messages`
Он предполагал написать сценарий, который отслеживал бы изменения в системном журнале /var/log/messages. К сожалению, этот код "зависает" и не делает ничего полезного. Почему? Найдите ошибку и исправьте ее (подсказка: вместо операции перенаправления stdin в цикл, попробуйте использовать конвейерную обработку).
---
Просмотрите сценарий Пример A-11, попробуйте изменить его таким образом, чтобы он выглядел проще и логичнее. Удалите все "лишние" переменные и попытайтесь оптимизировать сценарий по скорости исполнения.
Измените сценарий таким образом, чтобы он мог принимать начальную установку "поколения 0" из любого текстового файла. Сценарий должен считать первые $ROW*$COL символов, и на место гласных вставлять "живые особи". Подсказка: не забудьте преобразовать пробелы в символы подчеркивания.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Упражнения
Упражнения 1. В разделе 4.4 мы утверждали, что константы INADDR_, определенные в заголовочном файле <netinet/in.h>, расположены в порядке байтов узла. Каким образом мы можем это определить?2. Измените листинг 1.1 так, чтобы вызвать функцию getsockname после успешного завершения функции
Упражнения
Упражнения 1. Сравните использование дескриптора в случае, когда в коде сервера применяется функция fork, и в случае, когда используются потоки. Предполагается, что одновременно обслуживается 100 клиентов.2. Что произойдет в листинге 26.2, если поток при завершении функции
Упражнения
Упражнения 1. Что изменится, если в нашем примере, приведенном в конце раздела 27.3, мы зададим каждый промежуточный узел с параметром -G вместо -g?2. Размер буфера, указываемый в качестве аргумента функции setsockopt для параметра сокета IP_OPTIONS, должен быть кратен 4 байтам. Что бы
Упражнения
Упражнения 1. В этой главе говорилось, что почти все поля заголовка IPv6 и все дополнительные заголовки доступны приложению через параметры сокета или вспомогательные данные. Какая информация из дейтаграммы IPv6 не доступна приложению?2. Что произойдет в листинге 28.30, если
Упражнения
Упражнения 1. Каково назначение флага canjump в листинге 29.7?2. При работе программы udpcksum наиболее распространенным сообщением об ошибке является сообщение о недоступности порта ICMP (в пункте назначения не работает сервер имен) или недоступности узла ICMP. В обоих случаях нам не
Упражнения
Упражнения 1. Почему на рис. 30.2 родительский процесс оставляет присоединенный сокет открытым, вместо того чтобы закрыть его, когда созданы все дочерние процессы?2. Попробуйте изменить сервер из раздела 30.9 таким образом, чтобы использовать дейтаграммный доменный сокет Unix
Упражнения
Упражнения 1. В листинге 31.6 мы вызываем функцию putmsg, чтобы отправить вниз по потоку запрос на нормальное завершение соединения, а затем немедленно вызываем функцию close для закрытия потока. Что произойдет, если наш запрос будет потерян потоковой подсистемой, а мы закроем
2.2. Упражнения
2.2. Упражнения 1. Системные администраторы часто создают скрипты для автоматизации своего труда. Подумайте, для выполнения каких задач могут быть написаны сценарии.2. Напишите сценарий, который выводит дату, время, список зарегистрировавшихся пользователей, и uptime системы
Упражнения
Упражнения У10.1 Ограниченная универсализация Это упражнение немного специфично - оно ставит вопрос, детальный ответ на который будет дан позднее в этой книге. Его цель - дать возможность сравнить ваше решение с решением, предложенным в книге. Оно особенно полезно, если вы
Упражнения
Упражнения У11.1 Комплексные числа Напишите спецификацию АТД для класса COMPLEX, описывающую понятие комплексных чисел с арифметическими операциями. Исходите из точной
Упражнения
Упражнения У12.1 Наибольшее целое Предположим, компьютер генерирует исключение, когда сложение целых дает переполнение. Используя обработку исключений, напишите приемлемую по эффективности функцию, возвращающую наибольшее положительное целое, представимое на этой
Упражнения
Упражнения У13.1 Внешние классы При обсуждении интеграции внешнего не объектного ПО с объектной системой отмечалось, что компоненты являются тем уровнем, на котором нужно осуществлять интеграцию. Когда же речь идет об интеграции с ПО, созданным на другом объектном языке,
Упражнения
Упражнения У14.1 Многоугольники и прямоугольники Дополните версии классов POLYGON и RECTANGLE, наброски которых приведены в начале лекции. Включите в них подходящие процедуры
Упражнения
Упражнения У15.1 Окна как деревья Класс WINDOW порожден от TREE [WINDOW]. Поясните суть родового параметра. Покажите, какое новое утверждение появится в связи с этим в инварианте
Упражнения
Упражнения У16.1 Наследование: простота и эффективность Перепишите и упростите ранее созданную реализацию защищенного стека, сделав класс STACK3 потомком, а не клиентом STACK, чтобы избежать излишних обходных путей. (Подсказка: см. правила взаимодействия наследования и
Упражнения
Упражнения У18.1 Эмуляция перечислимых типов однократными функциями Покажите, что при отсутствии unique-типов перечислимый тип языка Pascaltype ERROR = (Normal, Open_error, Read_error)может быть представлен классом с однократной функцией для каждого значения