#define FIFO1 "/tmp/fifo.1"
#define FIFO2 "/tmp/fifo.2"
//#define FILE_MODE O_CREAT | O_EXCL
//#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
#define FILE_MODE 0666
int32_t main()
{
if ((mkfifo(FIFO1, FILE_MODE) < 0) && (errno != EEXIST))
{
cout << "Can't create fifo " << FIFO1 << endl;
return 1;
}
if ((mkfifo(FIFO2, FILE_MODE) < 0) && (errno != EEXIST))
{
cout << "Can't create fifo " << FIFO2 << endl;
unlink(FIFO1);
return 2;
}
cout << "FIFO created. Now creating child process..." << endl;
pid_t child_pid = fork();
if (child_pid == 0)
{
cout << "Inside child process..." << endl;
int32_t read_fd = open(FIFO1, O_RDONLY, 0);
cout << "[CHILD] Read fd = " << read_fd << endl;
int32_t write_fd = open(FIFO2, O_WRONLY, 0);
cout << "[CHILD] Write fd = " << write_fd << endl;
child_process(read_fd, write_fd);
exit(0);
}
cout << "Inside parent process..." << endl;
int32_t read_fd = open(FIFO2, O_RDONLY, 0);
cout << "[PARENT] Read fd = " << read_fd << endl;
int32_t write_fd = open(FIFO1, O_WRONLY, 0);
cout << "[PARENT] Write fd = " << write_fd << endl;
parent_process(read_fd, write_fd);
waitpid(child_pid, 0, 0);
close(read_fd);
close(write_fd);
unlink(FIFO1);
unlink(FIFO2);
return 0;
}
В приведенном выше коде первый open () блокируется бесконечно как для родительского, так и для дочернего процесса. Я пытался со всеми комбинациями FILE_MODE, прокомментированными в коде, но он блокирует Ваша помощь приветствуется.