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

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

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

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

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

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

  3. В меню «Устройства» виртуальной машины выбрать пункт «Общий буфер обмена» и настроить режим «Из основной в гостевую ОС»

  4. Создать в пользовательском каталоге два пустых текстовых файла с расширением .с.

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

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

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

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

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

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

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

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

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

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

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

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

- выводы.

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

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

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

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

  1. Что такое канал?

  2. Что такое FIFO?

  3. Как создать именованный канал??

  4. Для чего служит файл метка FIFO?

  5. С помощью какого системного вызова можно удалить файл?

  6. С помощью какого системного вызова можно изменить права доступа текущего процесса?

  7. Как организовать передачу данных от одного процесса другому через именованный канал?

  8. С помощью каких системных вызовов можно организовать запись в файл, чтение из файла?

  9. Каково назначение системного вызова open()?

  10. Что представляет собой модель взаимодействия «клиент-сервер».

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

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

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

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

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

* Программа клиент осуществляющая связь через FIFO */

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/wait.h>

int main(){

int fd1,fd2, result, c, f, b, n;

char reg[1];

size_t size;

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

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

unsigned short pack_word[1];/* массив для упакованного числа */

int nmas_pack = sizeof pack_word; /* количество байт, занимаемых массивом упа-кованным*/

char name1[]= "a.fifo"; /* имя канала для записи */

char name2[]= "b.fifo"; /* имя канала для чтения */

/* Обнуляем маску создания файлов текущего процесса для того,

чтобы права доступа у создаваемого FIFO точно соответствовали

параметру вызова mknod() */

(void)umask(0);

/* главный цикл */

while(1){

printf("Введите код режима работы (u / p) >");

scanf("%s",&reg);

printf("Введите код состояния (0 - 31) >");

scanf("%hd",&c); mas[0]=c;

printf("Введите признак ошибки (0 / 1) >");

scanf("%hd",&f); mas[1]=f;

printf("Введите признак занятости (0 / 1) >");

scanf("%hd",&b); mas[2]=b;

printf("Введите кол-во переданных байт (0 - 255) >");

scanf("%hd",&n); mas[3]=n;

/* открываем FIFO на запись.*/

if((fd1 = open(name1, O_WRONLY)) < 0){

/* Если открыть FIFO не удалось, печатаем об этом

сообщение и прекращаем работу */

printf("Can\'t open FIFO for writing\n");

exit(-1);

}

/* Пробуем записать в FIFO nmas байт */

size = write(fd1, mas, nmas);

if(size != nmas){

/* Если записалось меньшее количество байт,то сообщаем

об ошибке и завершаем работу */

printf("Can\'t write all string to FIFO\n");

exit(-1);

}

/* Закрываем входной поток данных и на этом родитель

прекращает работу */

close(fd1);

/* Открываем

FIFO на чтение.*/

if((fd2 = open(name2, O_RDONLY)) < 0){

/* Если открыть FIFO не удалось, печатаем об этом

сообщение и прекращаем работу */

printf("Can\'t open FIFO for reading\n");

exit(-1);

}

/* Пробуем прочитать из FIFO в массив */

size = read(fd2, pack_word, nmas_pack);

if(size < 0){

/* Если прочитать не смогли, сообщаем об ошибке

и завершаем работу */

printf("Can\'t read string\n");

exit(-1);

}

/* Печатаем прочитанную строку */

printf("%hu\n",pack_word[0]);

/* Закрываем входной поток и завершаем работу */

close(fd2);

}

printf("client exit\n");

return 0;

}

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