» » » Майкл Джонсон - Разработка приложений в среде Linux. Второе издание


Авторские права

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

Здесь можно скачать бесплатно "Майкл Джонсон - Разработка приложений в среде Linux. Второе издание" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство Вильямс, год 2007. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание
Рейтинг:
Название:
Разработка приложений в среде Linux. Второе издание
Издательство:
Вильямс
Год:
2007
ISBN:
978-5-8459-1143-8
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Разработка приложений в среде Linux. Второе издание"

Описание и краткое содержание "Разработка приложений в среде Linux. Второе издание" читать бесплатно онлайн.



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

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






Для взаимодействия с интервальными таймерами предусмотрены два системных вызова. Оба принимают аргумент which, указывающий обрабатываемый таймер.

int getitimer(int which, struct itimerval *val);

Переменной val присваивается текущее состояние таймера which.

int setitimer(int which, struct itimerval *new, struct itimerval *old);

Устанавливает таймер which на значение new и заменяет old предыдущей установкой, если она не равна NULL.

Если параметр таймера it_value приравнять к нулю, он немедленно заблокируется. Ввод нулевого значения для it_interval отключает таймер после следующего запуска.

В следующем примере родительский процесс активизирует дочерний процесс, запускает односекундный таймер ITIMER_REAL, засыпает на 10 секунд, а затем уничтожает дочерний процесс.

 1: /* itimer.c */

 2:

 3: #include <stdio.h>

 4: #include <stdlib.h>

 5: #include <sys/wait.h>

 6: #include <unistd.h>

 7: #include <string.h>

 8: #include <signal.h>

 9: #include <sys/time.h>

10:

11:

12: void catch_signal(int ignored) {

13:  static int iteration=0;

14:

15:  printf("получен сигнал интервального таймера, итерация %d\n",

16:   iteration++);

17: }

18:

19: pid_t start_timer(int interval) {

20:  pid_t child;

21:  struct itimerval it;

22:  struct sigaction sa;

23:

24:  if (!(child = fork())) {

25:   memset(&sa, 0, sizeof(sa));

26:   sa.sa_handler = catch_signal;

27:   sigemptyset(&sa.sa_mask);

28:   sa.sa_flags = SA_RESTART;

29:

30:   sigaction(SIGALRM, &sa, NULL);

31:

32:   memset(&it, 0, sizeof(it));

33:   it.it_interval.tv_sec = interval;

34:   it.it_value.tv_sec = interval;

35:   setitimer(ITIMER_REAL, &it, NULL);

36:

37:   while (1) pause();

38:  }

39:

40:  return child;

41: }

42:

43: void stop_timer(pid_t child) {

44:  kill(child, SIGTERM);

45: }

46:

47: int main (int argc, const char **argv) {

48:  pid_t timer = 0;

49:

50:  printf("Демонстрация интервальных таймеров для 10 секунд, "

51:   "ожидайте...\n");

52:  timer = start_timer(1);

53:  sleep(10);

54:  stop_timer(timer);

55:  printf("Готово.\n");

56:

57:  return 0;

58: }

Глава 19

Случайные числа

Слово случайный имеет разный смысл для разных программистов в различное время. Для большинства приложений оказываются достаточно эффективными псевдослучайные числа, предусмотренные библиотекой С. Благодаря тому, что псевдослучайные числа позволяют воспроизводить первоначальные условия, если это необходимо (например, с целью отладки), они оказываются предпочтительнее действительно случайных чисел.

Однако некоторые приложения (включая криптографические) для достижения наилучших результатов требуют использования действительно случайных чисел. Ядро Linux для предоставления криптографически устойчивых случайных чисел производит выборку событий из непредсказуемого внешнего мира.

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

19.1. Псевдослучайные числа

В некоторых ситуациях все же требуется обеспечить невозможность прогнозирования. Библиотека С содержит функции для генерирования ожидаемых последовательностей псевдослучайных чисел. Эти функции легки в применении и являются одинаковыми на всех платформах Unix. Рассмотрим пример типичного использования данных функций.

#include <stdlib.h>

#include <time.h>...


srand(time(NULL) +getpid());

for (...;...;...) {

 do_something(rand());

}

Общепринято в качестве начального значения для генератора псевдослучайных чисел задавать текущую дату в формате, возвращаемом функцией time(). Последняя возвращает количество секунд, прошедших с 1 января 1970 года, поэтому начальное значение изменяется каждую секунду. Таким образом, оно может считаться уникальным в течение достаточно длинного интервала времени (приблизительно 49 710 дней на 32-разрядном компьютере). Если необходимо предотвратить возможность одинаковой активизации программы для двух пользователей, которые запускают ее в одну и ту же секунду, добавьте в начальном значении ко времени идентификатор текущего процесса.

Числа, возвращаемые функцией rand(), удовлетворяют математическим свойствам случайного распределения, но не обладают высокой энтропией (уровнем неупорядоченности). Для достаточно больших выборок они хорошо распределены в пределах всевозможных 32-битовых чисел, однако для одного и того же начального значения можно получить различные наборы чисел. Это означает, что такие псевдослучайные числа пригодны почти для всех приложений, требующих случайного распределения чисел. К таким приложениям относятся игры, методы Монте-Карло (здесь важно сохранить начальное значение, чтобы любой желающий мог проверить ваши результаты), а также протоколы, которые обрабатывают коллизии путем ввода случайной задержки.

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

19.2. Криптография и случайные числа

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

• Убедить тех программистов, которые не являются специалистами в шифровании, оставить работу в этой области экспертам.

• Продемонстрировать криптографическим знатокам очень удобный инструмент, доступный для применения.

Если вы недостаточно хорошо знакомы с криптографией, однако вынуждены ее применять, мы рекомендуем [30] в качестве превосходного вводного руководства по этой теме.

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

Не лучшим способом решения проблемы является обращение к человеку для создания ключа. Чаще всего люди выбирают ключи, которые трудно назвать случайными. Подбор ключа, как правило, имеет отношение к естественному языку, словарный запас которого в терминах теории информации достаточно предсказуем. Говорят, что естественный язык обладает низкой энтропией; действительно случайный ключ имеет высокую энтропию.

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

Поскольку компьютеры не оснащены подобными устройствами, в системе Linux предлагается выход из ситуации. Тед Тсо (Ted Ts'o) написал код, который измеряет временные диаграммы внешних событий (щелчок мыши, нажатие кнопки клавиатуры и так далее), извлекает из них информацию и сохраняет ее в пуле энтропии. Некоторые компоненты человеческого (и другого внешнего) взаимодействия с компьютером являются в высшей степени случайными. Код, заполняющий пул энтропии, старается некоторым образом охарактеризовать величину добавленной энтропии, что позволяет программисту оценить степень неупорядоченности при генерировании случайной информации. В последнее время во многих компьютерах предусматриваются аппаратные источники криптографически случайных данных. В Linux такие случайные данные подаются в системном пуле энтропии, поэтому все программы Linux могут применять один и тот же интерфейс в зависимости от оборудования, которое они используют.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Разработка приложений в среде Linux. Второе издание"

Книги похожие на "Разработка приложений в среде Linux. Второе издание" читать онлайн или скачать бесплатно полные версии.


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

Все книги автора Майкл Джонсон

Майкл Джонсон - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

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

Отзывы о "Майкл Джонсон - Разработка приложений в среде Linux. Второе издание"

Отзывы читателей о книге "Разработка приложений в среде Linux. Второе издание", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.