SK/processes/c-sfifo.c

89 lines
2.3 KiB
C
Raw Normal View History

2023-01-22 22:23:37 +01:00
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> /* Definition of AT_* constants */
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <signal.h>
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-";
2023-01-28 13:34:00 +01:00
int f, f1, f2, f_temp;
2023-01-22 22:23:37 +01:00
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);
2023-01-28 13:34:00 +01:00
strcpy(kat_1_pid, kat_1);
strcpy(kat_2_pid, kat_2);
2023-01-22 22:23:37 +01:00
if (mkfifo(kat, 0600) == -1)
{
printf("mkfifo open error\n");
return;
}
2023-01-28 13:34:00 +01:00
if ((f = open(kat, O_RDONLY)) == -1)// || (f_temp = open(kat, O_WRONLY)) == -1)
2023-01-22 22:23:37 +01:00
{
unlink(kat);
printf("kat open error\n");
return;
}
for (;;)
{
2023-01-28 13:34:00 +01:00
int readres = read(f, &pid, sizeof(pid_t));
if(readres == -1){
printf("read error\n");
continue;
}else if(readres == 0){
continue;
2023-01-22 22:23:37 +01:00
}
2023-01-28 13:34:00 +01:00
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);
}
2023-01-22 22:23:37 +01:00
}
}
}