SHOW:
|
|
- or go back to the newest paste.
| 1 | #include <stdio.h> | |
| 2 | #include <stdlib.h> | |
| 3 | #include <string.h> | |
| 4 | ||
| 5 | #include <sys/types.h> | |
| 6 | #include <sys/stat.h> | |
| 7 | #include <fcntl.h> | |
| 8 | #include <unistd.h> | |
| 9 | #include <errno.h> | |
| 10 | ||
| 11 | - | #include "proto.h" |
| 11 | + | #include "proto.h" /* http://pastebin.com/EMfpHdZC */ |
| 12 | ||
| 13 | int main(int argc, char** argv) | |
| 14 | {
| |
| 15 | int fdfifo, fdoutfifo; | |
| 16 | char buf[RESULT_FIFO_PATH_BUF_SIZE]; | |
| 17 | query_t query; | |
| 18 | result_t result; | |
| 19 | ||
| 20 | - | if(mkfifo(QUERY_FIFO_PATH, S_IRUSR | S_IWUSR) < 0 && errno != EEXIST) |
| 20 | + | if(mkfifo(QUERY_FIFO_PATH, S_IRUSR | S_IWUSR) < 0 && errno != EEXIST) /* попытка найти или создать канал сервера */ |
| 21 | {
| |
| 22 | perror("mkfifo");
| |
| 23 | abort(); | |
| 24 | } | |
| 25 | ||
| 26 | - | while(1) |
| 26 | + | while(1) /* выполняем обработку всех запросов, блокируемся на open() или read() */ |
| 27 | {
| |
| 28 | - | if((fdfifo = open(QUERY_FIFO_PATH, O_RDONLY)) < 0) |
| 28 | + | if((fdfifo = open(QUERY_FIFO_PATH, O_RDONLY)) < 0) /* попытка открыть канал */ |
| 29 | {
| |
| 30 | perror("open");
| |
| 31 | abort(); | |
| 32 | } | |
| 33 | ||
| 34 | - | while(read(fdfifo, &query, sizeof(query))) |
| 34 | + | while(read(fdfifo, &query, sizeof(query))) /* цикл по запросам в канале */ |
| 35 | {
| |
| 36 | - | result.rs = query.m1 * query.m2; |
| 36 | + | result.rs = query.m1 * query.m2; /* вычисляем произведение чисел из запроса */ |
| 37 | ||
| 38 | - | sprintf(buf, RESULT_FIFO_PATH_FMT, query.pid); |
| 38 | + | sprintf(buf, RESULT_FIFO_PATH_FMT, query.pid); /* конструируем путь к каналу ответов */ |
| 39 | ||
| 40 | - | if((fdoutfifo = open(buf, O_WRONLY)) < 0) |
| 40 | + | if((fdoutfifo = open(buf, O_WRONLY)) < 0) /* попытка открыть канал ответа */ |
| 41 | {
| |
| 42 | perror("open");
| |
| 43 | abort(); | |
| 44 | } | |
| 45 | ||
| 46 | - | write(fdoutfifo, &result, sizeof(result)); |
| 46 | + | write(fdoutfifo, &result, sizeof(result)); /* запись ответа в канал */ |
| 47 | ||
| 48 | - | close(fdoutfifo); |
| 48 | + | close(fdoutfifo); /* ФД канала ответа больше не нужен, закрываем */ |
| 49 | ||
| 50 | - | printf("%ld -> [%s]\n", result.rs, buf);
|
| 50 | + | printf("%ld -> [%s]\n", result.rs, buf); /* вывод диагностической информации */
|
| 51 | } | |
| 52 | ||
| 53 | - | close(fdfifo); |
| 53 | + | close(fdfifo); /* ФД канала сервера больше не нужен */ |
| 54 | } | |
| 55 | ||
| 56 | return 0; | |
| 57 | } |