php — повторное открытие существующего FIFO выдает ошибку «Нет такого файла или каталога»

Я пытаюсь реализовать очень простую связь между сайтом PHP и программой на C ++.
Выбранное решение состояло в том, чтобы использовать Linux fifo.

Это хорошо работает для первой команды, но когда мы пытаемся открыть файл заново, возвращается ошибка.
См. Код ниже для получения дополнительной информации о сообщениях об ошибках.

Приложение C ++:

string path = "/tmp/cmd.fifo";
__mode_t priv = 0666;
int fifo;

mkfifo(path.c_str(), priv); // returns 0, but privileges are not applied
chmod(path.c_str(), priv); // returns 0 as well, and now privileges are working
fifo = open(path, O_RDONLY); // blocks the thread

PHP:

$fifoPath = "/tmp/cmd.fifo";
$fifo = fopen($fifoPath, 'w');
fwrite($fifo, "COMMAND");
fclose($fifo);

Приложение C ++:

// thread is unblocked. fifo==16
char in[20];
ssize_t r = read(fifo, in, sizeof(in)); // r == 7, in == "COMMAND"// process the command. And read again:
ssize_t r = read(fifo, in, sizeof(in)); // r = 0, so EOF

// Let's reopen it so we can wait for the next command.
// tried using close() here, no success though.
open(path.c_str(), O_RDONLY); // returns -1! strerror(errno) == "No such file or directory"mkfifo(path.c_str(), priv);  // returns -1! strerror(errno) == "File exists"

В чем может быть проблема с кодом выше? Сообщения «Нет такого файла или каталога» и «Файл существует» довольно противоречивы.

Кстати, я открыт для другого вида решения для этого общения, например, решение C ++ или что-то с использованием библиотек повышения.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]