- •Исследование моделей взаимодействия процессов именованные каналы
- •1. Цель работы
- •2. Краткие теоретические сведения
- •2.1 Именованные каналы
- •2.2 Открытие именованного канала
- •2.3 Удаление файлов
- •2.4 Пример программы
- •3. Задания на лабораторную работу
- •4. ТехническиЕ средствА для выполнения работы.
- •5. Порядок выполнения лабораторной работы
- •6. Содержание отчета о выполнении лабораторной работы
- •7. Порядок защиты работы
- •8. Контрольные вопросы
- •Библиографический список
- •Приложение а (справочное) текст программы lr6_client
- •Приложение б (справочное) Текст программы lr6_server
Приложение б (справочное) Текст программы lr6_server
/* Программа сервер, осуществляющая связь через 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;
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);
/*Если файлы с таким именем существует, удалим их*/
unlink("a.fifo");
unlink("b.fifo");
/* Попытаемся создать FIFO с именем a.fifo в текущей
директории */
if(mknod(name1, S_IFIFO | 0666, 0) < 0){
/* Если создать FIFO не удалось, печатаем об этом
сообщение и прекращаем работу */
printf("Can\'t create a.FIFO\n");
exit(-1);
}
/* Попытаемся создать FIFO с именем b.fifo в текущей
директории */
if(mknod(name2, S_IFIFO | 0666, 0) < 0){
/* Если создать FIFO не удалось, печатаем об этом
сообщение и прекращаем работу */
printf("Can\'t create b.FIFO\n");
exit(-1);
}
while(1){
/* Открываем
FIFO на чтение.*/
if((fd1 = open(name1, O_RDONLY)) < 0){
/* Если открыть FIFO не удалось, печатаем об этом
сообщение и прекращаем работу */
printf("Can\'t open FIFO for reading\n");
exit(-1);
}
/* открываем FIFO на запись.*/
if((fd2 = open(name2, O_WRONLY)) < 0){
/* Если открыть FIFO не удалось, печатаем об этом
сообщение и прекращаем работу */
printf("Can\'t open FIFO for writing\n");
exit(-1);
}
/* Пробуем прочитать из FIFO nmas байт в массив */
size = read(fd1, mas, nmas);
if(size <= 0){
/* Если прочитать не смогли, сообщаем об ошибке
и завершаем работу */
printf("Can\'t read \n");
exit(-1);
}
pack_word[0]=(mas[0]&0x1F)<<11;
pack_word[0]|=(mas[1]&1)<<9;
pack_word[0]|=(mas[2]&1)<<8;
pack_word[0]|= mas[3]&0xFF;
/* Пробуем записать в FIFO nmas_pack байт */
size = write(fd2, pack_word, nmas_pack);
if(size != nmas_pack){
/* Если записалось меньшее количество байт,то сообщаем
об ошибке и завершаем работу */
printf("Can\'t write to FIFO\n");
exit(-1);
}
/* Закрываем */
close(fd1);
close(fd2);
}
printf(" server exit\n");
return 0;
}
Заказ №____ от «___» __________20__г. Тираж_____экз.
Изд-во СевГУ
