在c++和php中的程序之间传递大数据

pass large data between programs in c++ and php

本文关键字:之间 数据 程序 c++ php      更新时间:2023-10-16

我需要在linux上开发两个程序:cpp_prog是一个用c++编写的小程序。它监视消息队列系统。一旦队列系统中有消息可用,程序就会下载该消息,然后调用另一个php程序,比如php_prog,以处理该消息并读取php_prog的输出。php_prog完成后,cpp_pg将重新获得控制并再次侦听消息队列系统。这个过程将永远持续下去。

我的问题是如何将大量数据从c++传递到php并读取php程序的输出。

消息可能很长,所以在c++system("php_prog message_string");中进行系统调用不是一个好的选择。

我也试过用fifo。在cpp_log 中

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 msgn";
var_dump($str_content);
echo "endn";

但是cpp_pg被阻止,直到我从其他地方(例如终端(调用"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 msgn";
var_dump($msg_content);
echo "endn";