重新打开现有FIFO会出现错误“没有这样的文件或目录”

时间:2013-02-01 10:10:31

标签: php c++ file-io fifo mkfifo

我正在努力实现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 ++解决方案或使用boost库的东西。

0 个答案:

没有答案