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

4. ТехническиЕ средствА для выполнения работы

  1. Компьютерный класс с установленными ОС WINDOWS и виртуальными машинами позволяющими запускать ОС Linux.

5. Порядок выполнения лабораторной работы

  1. Произвести загрузку операционной системы.

  2. Создать папку e:\VM\Share.

  3. Создать текстовый файл, содержащий программу приведенную в приложении А и сохранить его в папку e:\VM\Share.

  4. Произвести запуск виртуальной машины и загрузку в ней операционной системы LINUX.

  5. Произвести регистрацию с именем пользователя и паролем, указанным преподавателем.

  6. В меню «Устройства» виртуальной машины выбрать пункт «Общие папки» и добавить папку e:\VM\Share.

  7. В командной строке Linux ввести команду для перехода в режим суперпользователя (su, пароль: user).

  8. Произвести монтирование папки mount –t vboxsf share /mnt/share .

  9. Выйти из режима суперпользователя exit.

  10. Перенести текстовый файл с программой из папки /mnt/share в папку user.

  11. Переименовать текстовый файл с программой в файл с расширением с.

  12. Откомпилировать программу с помощью gcc (gcc имя.c -o имя).

  13. Произвести запуск программы (./имя -p)

  14. Ввести исходные данные и получить слово состояния устройства.

  15. Создать и отладить программу, соответствующую варианту задания.

6. Содержание отчета о выполнении лабораторной работы

Отчёт должен содержать:

- титульный лист;

- цель лабораторной работы;

- задание соответствующее варианту;

- текст программы;

- результаты работы программы;

- выводы.

Отчёт по лабораторной работе должен быть выполнен в соответствии требованиями ДСТУ.

7. Порядок защиты работы

Защита производится при наличии отчета за компьютером и состоит в демонстрации работы программы в соответствии с вариантом задания.

8. Контрольные вопросы

1. Что такое системный вызов?

2. Какие системные вызовы служат для открытия файла? Что такое дескриптор файла?

3. Как формируются права доступа к создаваемому файлу?

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

5. Какая функция служит для обработки ошибок системных вызовов?

6. Для чего предназначены параметры функции main(int argc, char *argv[])?

7. Для чего предназначена функция atoi()?

8. Как сгенерировать случайное число в диапазоне от 0 до 255?

Библиографический список

  1. Белецкий Я. Энциклопедия языка Си / Я. Белецкий, пер. с пол. А. Д. Плитман, ред. Ф. Ф. Пащенко. - М.: Мир, 1992. - 686 c.

  2. Бондаренко М. Ф. Системное программирование в современных операционных системах: учебное пособие для студентов вузов / М. Ф. Бондаренко [и др.]. - Харьков: Компания СМИТ, 2005. - 432 с.

  3. Бек Л. Введение в системное программирование / Л. Л. Бек; Ред. Л. Н. Королев, Пер. с англ. Н. А. Богомолов. - М.: Мир, 1988. - 448 с.

Приложение а (справочное) Текст программы

/*

*Программа, предназначенная для формирования и записи в файл

*наборов неупакованных чисел, содержащих информацию о состоянии

*устройства.

*опция -g генерация и запись файла

*опция -r чтение из файла

*/

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <unistd.h>

#include <fcntl.h>

#define FILERIGHTS 0644 /* права доступа для файла */

void generator(char *, int);

void reader(char *);

void myerror(char *); /*функция обработки ошибок системных вызовов*/

int main(int argc, char * argv[])

{

if (argc < 3|| argc > 4)

{

fprintf(stderr,"ошибка вызова %s\n",argv[0]);

fprintf(stderr,"вызов: \n");

fprintf(stderr,"генерация и запись файла: %s -g целевой_файл количество_наборов_чисел\n",argv[0]);

fprintf(stderr,"чтение: %s -r исходный_файл\n",argv[0]);

exit(1);

}

else

{

switch(argv[1][1])

{

case 'g': generator(argv[2], atoi(argv[3])); break;

case 'r': reader(argv[2]); break;

default : printf("некорректная опция\n");

}

}

return 0;

}

void generator(char * fnameout, int n)

{

int i;

int fdout; /* дескриптор файла */

unsigned short mas[4]; /* массив для генерируемого набора чисел */

int nmas = sizeof mas; /* количество байт, занимаемых массивом */

int nw; /* количество байт, фактически записанных в файл */

/*создание файла*/

if((fdout = creat(fnameout,FILERIGHTS))<0)

{

myerror("generator: ошибка создания файла");

}

/*генерация и запись n наборов*/

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

{

/*генерация*/

mas[0] = (unsigned short)rand()%32; /* код состояния (0 - 31)*/

mas[1] = (unsigned short)rand()%2; /* признак ошибки (0 - 1)*/

mas[2] = (unsigned short)rand()%2; /*признак занятости (0 - 1)*/

mas[3] = (unsigned short)rand()%256; /* количество байт (0 - 255)*/

/*вывод на экран*/

printf("сгенерирован %d-набор:\n",i);

printf("код состояния %hu\n", mas[0]);

printf("признак ошибки %hu\n", mas[1]);

printf("признак занятости %hu\n", mas[2]);

printf("количество байт %hu\n", mas[3]);

/*вывод в файл*/

if((nw = write(fdout, mas, nmas)) != nmas)

{

myerror("generator: ошибка записи ");

}

}

/*закрытие файла*/

if ( close(fdout) == -1)

{

myerror("generator: ошибка закрытия файла ");

}

}

void reader(char *fnamein)

{

int fdin; /*файловый дескриптор*/

unsigned short mas[4];

int nmas = sizeof mas; /*размер блока в байтах*/

int nr; /*количество фактически прочитанных байт*/

int i;

/*открытие файла*/

if ((fdin = open(fnamein, O_RDONLY))<0)

{

myerror("reader: ошибка открытия файла");

}

i = 1;

/*чтение из файла данных порциями по nmas байт*/

while ((nr = read(fdin, mas, nmas)) == nmas)

{

printf("Прочитан %d-набор:\n",i);

printf("код состояния %hu\n", mas[0]);

printf("признак ошибки %hu\n", mas[1]);

printf("признак занятости %hu\n", mas[2]);

printf("количество байт %hu\n", mas[3]);

i += 1;

}

if (nr < 0)

{

myerror("reader: ошибка чтения");

}

/* закрытие файла */

if (close(fdin) == -1)

{

myerror("reader: ошибка закрытия файла");

}

}

void myerror(char * st)

{

perror(st);

exit(1);

}

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