Вход/Регистрация
Linux программирование в примерах
вернуться

Роббинс Арнольд

Шрифт:

Упражнения

1. Напишите функцию

lockf
, используя
fcntl
для осуществления блокировки.

2. Каталог

/usr/src/linux/Documentation
содержит набор файлов, которые описывают различные аспекты поведения операционной системы. Прочитайте файлы
locks.txt
и
mandatory.txt
, чтобы получить больше сведений об обработке Linux блокировок файлов.

3. Запустите на своей системе программу

ch14-lockall
без обязательной блокировки и посмотрите, сможете ли изменить файл-операнд.

4. Если у вас не-Linux система, поддерживающая обязательную блокировку, попробуйте исполнить на ней программу

ch14-lockall
.

5. Напишите функцию

strftimes
следующего вида:

size_t strftimes(char *buf, size_t size, const char *format,

 const struct timeval *tp);

Она должна вести себя подобно стандартной функции

strftime
за тем исключением, что должна использовать
%q
для обозначения «текущего числа микросекунд».

6. Используя только что написанную функцию

strftimes
, напишите расширенную версию date, которая принимает форматирующую строку, начинающуюся с ведущего
+
, и форматирует текущие дату и время (см. date(1)).

7. Обработка тайм-аута в

ch14-timers.c
довольно примитивна. Перепишите программу с использованием
setjmp
после вывода приглашения и
longjmp
из обработчика сигнала. Улучшает ли это структуру или ясность программы?

8. Мы заметили, что

ch14-timers.c
содержит намеренное состояние гонки. Предположим, пользователь вводит ответ в нужное время, но
ch14-timers
приостановлена, прежде чем сигнал может быть отменен. Какой вызов вы сделаете, чтобы уменьшить размер проблемного окна?

9. Нарисуйте дерево, как показано в выводе

ch14-tsearch
в разделе 14.4.5 «Обход дерева:
twalk
».

10. Исследуйте файл

/usr/share/dict/words
на системе GNU/Linux. (Это словарь проверки правописания для
spell
; на различных системах он может находиться в разных местах.) В файле слова размешены в отсортированном порядке, по одному в строке.

Для начала используйте программу

awk
для создания нового списка в случайном порядке:

$ awk '{ list[$0]++ }

> END { for (i in list) print i }' /usr/share/dict/words > /tmp/wlist

Далее, напишите две программы. Каждая должна читать новый список и сохранять каждое прочитанное слово в дереве и массиве соответственно. Вторая программа должна использовать для сортировки массива

qsort
, а для поиска —
bsearch
. Получите из дерева или массива слово '
gravy
'. Вычислите время работы двух программ, чтобы увидеть, какая быстрее. Вам может потребоваться заключить получение слова внутрь цикла, повторяющегося множество раз (скажем, 1000), чтобы получить достаточное для определения разницы время.

Используйте вывод

ps
, чтобы посмотреть, сколько памяти используют программы

11. Повторно запустите обе программы, использовав оригинальный отсортированный словарный файл, и посмотрите, как изменятся временные результаты (если они вообще изменятся).

Часть 3

Отладка и заключительный проект

Глава 15

Отладка

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

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

Данная глава охватывает ряд тем, начиная с общих методик и советов по отладке (компилирование для отладки и элементарное использование GDB, отладчика GNU), переходя к ряду методик для использования при разработке и отладке программы, упрощающих отладку, и затем рассмотрением ряда инструментов, помогающих в процессе отладки. Глава завершается краткими сведениями по тестированию программного обеспечения и великолепным набором «правил отладки», извлеченных из книги, которую мы весьма рекомендуем.

Большая часть наших советов основана на нашем долгосрочном опыте участия в качестве добровольца в проекте GNU по поддержке

gawk
(GNU
awk
). Большинство, если не все, специфические примеры, которые мы представляем, происходят от этой программы. На протяжении главы особые рекомендации помечены словом Рекомендация.

15.1. Сначала главное

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

  • Читать дальше
  • 1
  • ...
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: