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




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;

 

}

 


Приложение Б

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

Изд-во СевГУ



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: