我需要在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
答案 0 :(得分:0)
我最终在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";