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

Приложение б (справочное) Текст программы 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__г. Тираж_____экз.

Изд-во СевГУ

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