Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IT3.doc
Скачиваний:
10
Добавлен:
03.03.2016
Размер:
343.04 Кб
Скачать

2.2. Ошибки при выполнении системных вызовов

Ядро оповещает вашу программу при возникновении ошибки с помощью определенного кода ошибки.

На рисунке 6 показан вызов функции perror которая узнает у ядра код ошибки и выводит в соответствии с возникшей стандартной ошибкой строку, которую вы ей передаете, вместе с кратким сообщением об ошибке.

#include <stdio.h>

void perror(char *s);

Пример:

if ((file = open(DB_PATH, O_RDONLY))<0)

{

perror(«не удается открыть файл базы данных»);

}

Выведется:

не удается открыть файл базы данных: No such file or directory

Рисунок 6 – Использование функции perror

Код ошибки записывается в переменную errno из <errno.h>. Это переменная типа int, значение которой устанавливается равным положительному номеру ошибки различными библиотечными функциями.

2.3. Генерация случайных чисел

Функция rand() генерирует псевдослучайное целое число в диапазоне от нуля до значения RAND_MAX. RAND_MAX –это константа, которая определена в <stdlib.h>.

Диапазон значений, непосредственно генерируемых rand, часто отличается от того, который необходим в конкретном приложении. Если вы хотите получить целое число из интервала [A..B], то используйте соотношение

int x = A + rand() % (B+1-A).

Например, чтобы получить целое число в диапазоне от минус100 до 100, нужно вычислить x = -100+ rand() % 201.

В результате вычисления выражения rand() % 201, то есть взятия остатка от деления на 201, получим целое число в диапазоне от 0 до 200. Это называется масштабированием. После этого сдвигаем диапазон генерируемых случайных чисел, отнимая 100 от предыдущего результата. Получается целое число в диапазоне от минус 100 до 100.

На рисунке 7 приведен в качестве примера фрагмент программы, моделирующий 10 бросков шестигранной игральной кости.

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

printf(“%4d”, 1+ rand()%6 );

Рисунок 7 – Моделирование 10 бросков шестигранной игральной кости

При каждом вызове такой программы последовательность чисел будет повторяться. Чтобы получать разные последовательности следует задавать некий начальный параметр последовательности (это называется «рандомизация») при помощи функции srand( число ).

Для рандомизации часто используется функция time() которая определяет текущее календарное время в секундах. То есть компьютер считывает показания внутренних часов, чтобы автоматически получить не определенное заранее значение

srand(time(NULL)).

2.4. Пример программы

Устройство сообщает о своем состоянии с помощью нескольких чисел.

Состояние устройства представляется в виде кода состояния (C – число в диапазоне от 0 до 31), признака ошибки (F – 1/0), признака занятости (B – 0/1), количества байт, переданных в последней операции (N – число в диапазоне от 0 до 255).

Эти числа объединяются в одно слово состояния устройства, формируемое способом представленным в таблице 1.

Таблица 1 – Слово состояния устройства

№ разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

значение

C

C

C

C

C

0

F

B

N

N

N

N

N

N

N

N

Программа должна вызывает функцию генерации и записи файла упаковки при указании опции -g в командной строке, а функцию чтение из файла – при указании опции -r.

Полный текст программы приведен в приложении А. Результат вызова программы приведен в приложении Б.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]