#include #include #include /* Definition of AT_* constants */ #include #include #include #include static const char *kat = "/tmp/FIFO-TMP-SERWER"; static const char *kat_1 = "/tmp/FIFO-TMP-1-"; static const char *kat_2 = "/tmp/FIFO-TMP-2-"; int f, f1, f2, f_temp; void end() { close(f); close(f1); close(f2); unlink(kat); exit(0); } int main() { pid_t pid; char kat_1_pid[100]; char kat_2_pid[100]; signal(SIGTERM, end); signal(SIGINT, end); strcpy(kat_1_pid, kat_1); strcpy(kat_2_pid, kat_2); if (mkfifo(kat, 0600) == -1) { printf("mkfifo open error\n"); return; } if ((f = open(kat, O_RDONLY)) == -1)// || (f_temp = open(kat, O_WRONLY)) == -1) { unlink(kat); printf("kat open error\n"); return; } for (;;) { int readres = read(f, &pid, sizeof(pid_t)); if(readres == -1){ printf("read error\n"); continue; }else if(readres == 0){ continue; } pid_t pid_c; if((pid_c = fork()) != -1){ if(pid_c == 0){ printf("pid: %d\n", pid); sprintf(kat_1_pid + strlen(kat_1), "%d", pid); sprintf(kat_2_pid + strlen(kat_2), "%d", pid); if ((f2 = open(kat_2_pid, O_RDONLY)) == -1) { // unlink(kat); close(f); printf("kat2 open error\n"); return -1; } printf("f2 open\n"); if ((f1 = open(kat_1_pid, O_WRONLY)) == -1) { // unlink(kat); close(f2); close(f); printf("kat1 open error\n"); return -1; } printf("f1 open\n"); double d2, d; read(f2, &d, sizeof(double)); d2 = d * d; printf("d1: %f d2: %f\n", d, d2); write(f1, &d2, sizeof(double)); close(f1); close(f2); close(f); return 0; }else{ wait(pid_c); } } } }