我需要在 linux 上开发两个程序:cpp_prog 是一个用 c++ 编写的小程序。它监视消息队列系统。一旦消息在队列系统中可用,程序就会下载消息,然后调用另一个 php 程序,比如 php_prog 来处理消息并读取 php_prog 的输出。当php_prog结束后,cpp_prog会拿回控制权,重新监听消息队列系统。这个过程将永远持续下去。
我的问题是如何将大数据从 c++ 传递到 php 并读取 php 程序的输出。
消息可能会很长,所以用 C++ 系统调用 system("php_prog message_string");
不是一个好的选择。
我也试过使用 fifo。在 cpp_prog 中
int fifo = open(fifo_name.c_str(), O_WRONLY);
write(fifo, msg_string.c_str(), strlen(msg_string.c_str()));
close(fifo);
system("php_prog fifo_name"); //call php_prog with fifo name
在 php_prog 中:
$fifo = $argv[1];
var_dump($fifo);
$str_content = file_get_contents($fifo);
echo "here is msg\n";
var_dump($str_content);
echo "end\n";
但是 cpp_prog 被阻塞,直到我从其他地方(例如终端)调用“php_prog fifo_name”来读取 fifo。
我愿意接受任何建议(但我真的会避免使用 tmp 文件)。如果能提供一个简单的代码就太好了。
BR
最佳答案
我终于在 C++ 中使用 popen
和在 PHP 中使用 file_get_contents
来解决问题。
在 cpp_prog 中:
FILE* fp = popen(cmd.c_str(), "w");
fwrite(msg_string.c_str(), sizeof (char), msg_string.size(), fp);
fflush(fp);
pclose(fp);
在 php_prog 中:
$msg_content = file_get_contents("php://stdin");
echo "here is msg\n";
var_dump($msg_content);
echo "end\n";
关于php - 在 C++ 和 PHP 程序之间传递大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32827217/