Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Программирование для Linux. Профессиональный подход - Митчелл М.

Митчелл М., Оулдем Дж., Самьюал А. Программирование для Linux. Профессиональный подход — М.: Вильямс , 2003. — 288 c.
ISBN 5-8459-0243-6
Скачать (прямая ссылка): programmirovaniedlyalinux2003.djvu
Предыдущая << 1 .. 55 56 57 58 59 60 < 61 > 62 63 64 65 66 67 .. 128 >> Следующая

Разница между устройствами проявляется, когда запас случайных чисел в
ядре Linux заканчивается. Если попытаться прочесть большое количество
байтоа из устройства /dev/random и при этом не выполнять никаких
пользовательских действий (ие нажимать клавиши, ис перемещать мышь и
т.п.), система заблокирует операцию чтения Только когда пользователь
проявит какую-то активность, система сгенерирует дополнительные случайные
числа и передаст их программе.
Попытайтесь, к примеру, отобразить содержимое файла /dev/randomc помощью
команды od.1 В каждой строке выходных данных содержится 16 случайных
байтов.
% od -t xl /dev/random
0000000 2с 9с 7а db 2е 79 3d 65 36 с2 еЗ
lb 52 75 1е 1а
0000020 d3 6d le а7 91 05 2d 4d сЗ аб de 54
29 f4 46 04
0000040 ЬЗ Ь0 8d 94 21 57 f3 90 61 dd 26 ac
94 сЗ Ь9 3a
0000060 05 a3 02 cb 22 0a be c9 45 dd a6 59
40 22 53 d4
Число строк в выводе команды будет разным (их может оказаться очень
мало). Главное то, что, в конце концов, вывод прекратится, поскольку
операционная систем исчерпает запас случайных чисел. Попробуйте теперь
переместить мышь или нажать что-нибудь на клавиатуре, и вы увидите, что
пояаляются новые случайные числа.
В противоположность этому операция чтения из устройства /dev/random
никогда не блокируется. Если в системе кончаются случайные числа, Linux
использует криптографический алгоритм, чтобы сгенерировать
псевдослучайные числа из последней цепочки случайных байтов.
Следующая команда будет выполняться до тех пор. пока пользователь не
нажмет <CtrI+C>.
% od -t xl /dev/urandom
0000000 62 71 d6 3e af dd de 62 cO 42 78
bd 29 9c 69 49
0000020 26 3b 95 be b9 6c 15 16 3B fd 7e 34
fO ba ее СЗ
0000040 95 31 eS 2c 8d 8a dd f4 Ы 3b 9b 44
2f 20 dl 54
3 Мы могли бы испапмватт программу hexdump вместо команды od, пах х<т*
они делают, по сути, одно и то же. Но когда входной поток исчерпыёается,
программа hexdvtnp завершается, а команда od переходит в режим ожидания.
Опция -t xJ сообщат команде od о том, что содержимое файла демжно
отображаться в шестнадцатеричном формате.
130 Часть II. Секреты Linux
Поучить доступ в программе к генератору случайных чисел несложно. В
листинге 6-1 покааанв функция, которая генерирует случайное число, читая
байты из файла /dev/random. Помните, что операция чтения из этого файла
окажется заблокированной в случае нехватки случайных чисел. Если важна
скорость работы функции и можно смириться с тем, что некоторые чнсла
окажутся псевдослучайными, воспользуйтесь файлом /dev/urandom.
Листинг 6.1. (nmdom_rumi*r.t) Генерирование случайного чвелк с помощью
файла. /d"v/eindoi
¦include <assert.h>
•include <sys/stat.h>
¦include <вуз/types.h>
¦include <?cntl.h>
¦include <unistd,h>
/* Функция возвращает случайное число в диапазоне от MIN до МАХ
включительно. Случайная последовательность Сайтов читается из файла
/dev/random. */
int random_number (int min, int max)
<
/* Дескриптор файла /dev/random сохраняется в статической переменной,
чтобы не приходилось повторно открывать файл прн каждой следующем вызове
функции. */ static int dev__randorrL_fd = -1;
char* next_randoiri_byte; int bytes__to_read; unsigned randonL.valuej
/• Убеждаемся, что аргумент MAX больше, чем MIN. */ assert (max > min);
/" Если функция вызывается впервые# открываем файл /dev/random и
сохраняем его дескриптор. */ if (dev_random_?d ¦" -1) {
dev_randorn_fd = open ("/dev/random*, 0_RD0NLY| j assert (dev_randoin_fd
!= -1J;
I
/* Читаем столько байтов, сколько необходимо для заполнения целочисленной
переменной. "/ next_random_byte " (char*) &randon\_veluej bytes_to_reod
=" si zeo ? (random_val ue I;
/* Цикл выполняется до тех пор, пока не будет прочитано требуемое
количество байтов. Поскольку файл /dev/random заполняется в результате
пользовательских действий, при длительном отсутствии активности операция
чтения может быть заблокирована или возвращать лишь один байт за раз. */
do (
int bytes_read;
bytes_read - read (dev_randon\_?d, next_randonL.byte, bytes_to_read);
bytes_to_read -¦ bytes_read; next_n^don\_byte ¦+= bytae_read;
J while (bytes_to_read > 0};
/* Вычисляем случайное число в правильном диапазоне, */ return min +
(randonLvalue % (max - min + l))i
>
Глава б Устройства 131
6.5.5. Устройства обратной связи
Устройство обратной связи позволяет сымитировать блочное устройство с
помощью обычного дискового файла. Представьте жесткий диск, в котором
данные находятся ие в дорожках и секторах, а в файле с именем disk-image
(естественно, сам этот файл должен размещаться иа реальном диске, размер
которого больше имитируемого).
Устройства обратной связи называются /dev/loopO, /dev/loop1 и т.д.
Каждому из них соответствует одно виртуальное блочное устройство
Создавать такие устройства может только суперпользователь.
Устройство обратной связи используется так же, как н любое другое блочное
устройство. В частности, на нем можно создать файловую систему и
смонтировать се подобно файловой системе обычного диска или раздела.
Предыдущая << 1 .. 55 56 57 58 59 60 < 61 > 62 63 64 65 66 67 .. 128 >> Следующая