View difference between Paste ID: HvEhTVSv and ryVsSm5P
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
}