在c ++和php

时间:2015-09-28 16:01:34

标签: php c++ fifo

我需要在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

1 个答案:

答案 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";