Пытаюсь запилить чатик между двумя процессами, используя 2 FIFO: в первое FIFO первый запущенный процесс пишет, из второго читает. Второй запущенный - наоборот.
Определение первый-второй работает, а вот данные ни один процесс не читает. Происходит зависание на «reading». ЧЯДНТ?
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#define RFIFO ".rfifo"
#define WFIFO ".wfifo"
int main(void)
{
FILE *rf, *wf;
int rd, wd;
char buf[1024];
mknod(WFIFO, S_IFIFO | S_IRWXU, 0);
mknod(RFIFO, S_IFIFO | S_IRWXU, 0);
wd = open (RFIFO, O_WRONLY | O_NONBLOCK);
if ((wf = fdopen (wd, "w")) == NULL) /* если никто не читает, вернет NULL. если читают - процесс второй, так и используем для записи */
{
close (wd);
rf = fopen (RFIFO, "r"); /* блокируется до открытия на запись */
wf = fopen (WFIFO, "w");
printf ("first. FIFO open.\n");
}
else
{
sleep (1); /* во избежание одновременного открытия двумя процессами */
rf = fopen (WFIFO, "r");
printf ("second. FIFO open.\n");
}
while(1)
{
if (fgets (buf, 1024, stdin) != NULL)
{
if (fputs (buf, wf) != EOF)
printf ("put\n");
}
printf ("reading\n");
if (fgets (buf, 1024, rf) != NULL)
{
printf ("%s", buf);
}
printf ("read\n");
}
fclose (rf);
fclose (wf);
return EXIT_SUCCESS;
}