Здравствуйте.
Как сделать полнодуплексный fifo в Linux.
Есть тестовая программа test.cpp:#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
int fd, c;
if (argc < 2 || (fd = open("fifo", O_RDWR | O_NONBLOCK)) == -1)
return 1;
while (true) {
if (random() % 100000 == 0)
write(fd, argv[1], 1);
if (random() % 50000 == 0 && read(fd, &c, 1) == 1)
write(1, &c, 1);
}
return 0;
}
Делаем с одного терминала:
$ mkfifo fifo
$ ./tets 1
С другого терминала:
$ ./test 2
Из вывода на обоих терминалах видно что каждый процесс читает с fifo как свои так и чужие данные. Я понимаю что это соответствует стандарту POSIX но хотелось бы чтобы каждый из процессов читал только чужие данные. Как это сделать? Данные пишутся и читаются совершенно асинхронно - какую-либо синхронизацию не предлагать. Не предлагать также использовать два fifo.