Программа, автоматически определяющая свою функцию -- клиент или сервер -- по наличию коммуникационного ресурса: каждый экземпляр процесса производит поиск именованного канала (FIFO) с заранее известным именем. Если FIFO не найден, процесс создает его и начинает функционировать как сервер. Если FIFO найден, процесс открывает его и начинает функционировать как клиент. Функции сервера: занести в FIFO текущее время (формат можно выбирать произвольно) и ежесекундно его обновлять. Функции клиента: считывать текущее значения времени из FIFO и выводить его на консоль (однократно при запуске или в цикле).
Помогите! Как мне сиправить мой код, чтобы заработало??
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <time.h>
#include <string.h>
#define PIPENAME "lab5-pipe"
int server_mode;
static void catch_signal(int signal) {
if(signal == SIGINT){
if(server_mode)
unlink(PIPENAME);
exit(0);
}
}
int main(void) {
if (signal(SIGINT, catch_signal) == SIG_ERR) {
fprintf(stderr, "Can't set signal handler.\n");
exit(1);
}
if(mkfifo(PIPENAME, 0666) == 0){
server_mode = 1;
printf("server\n");
fflush(stdout);
int fd = open(PIPENAME, O_WRONLY);
time_t rawtime;
struct tm * timeinfo;
char buf[100];
while(1){
time(&rawtime);
timeinfo = localtime(&rawtime);
strcpy(buf, asctime(timeinfo));
write(fd, buf, strlen(buf));
sleep(1);
}
}else{
server_mode = 0;
fprintf(stdout, "client\n");
fflush(stdout);
int fd = open(PIPENAME, O_RDONLY);
char buf[100];
while(read(fd, &buf, 100)!=0){
printf("%s\n", buf);
fflush(stdout);
}
}
return 0;
}