Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <errno.h>
- #include "proto.h" /* http://pastebin.com/EMfpHdZC */
- int main(int argc, char** argv)
- {
- int fdfifo, fdoutfifo;
- char buf[RESULT_FIFO_PATH_BUF_SIZE];
- query_t query;
- result_t result;
- if(mkfifo(QUERY_FIFO_PATH, S_IRUSR | S_IWUSR) < 0 && errno != EEXIST) /* попытка найти или создать канал сервера */
- {
- perror("mkfifo");
- abort();
- }
- while(1) /* выполняем обработку всех запросов, блокируемся на open() или read() */
- {
- if((fdfifo = open(QUERY_FIFO_PATH, O_RDONLY)) < 0) /* попытка открыть канал */
- {
- perror("open");
- abort();
- }
- while(read(fdfifo, &query, sizeof(query))) /* цикл по запросам в канале */
- {
- result.rs = query.m1 * query.m2; /* вычисляем произведение чисел из запроса */
- sprintf(buf, RESULT_FIFO_PATH_FMT, query.pid); /* конструируем путь к каналу ответов */
- if((fdoutfifo = open(buf, O_WRONLY)) < 0) /* попытка открыть канал ответа */
- {
- perror("open");
- abort();
- }
- write(fdoutfifo, &result, sizeof(result)); /* запись ответа в канал */
- close(fdoutfifo); /* ФД канала ответа больше не нужен, закрываем */
- printf("%ld -> [%s]\n", result.rs, buf); /* вывод диагностической информации */
- }
- close(fdfifo); /* ФД канала сервера больше не нужен */
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment