在Linux中传递C可执行文件和PHP之间的数据结构?

时间:2011-11-28 10:54:06

标签: php c string data-structures stdin

在我之前的问题中: Passing data between PHP and C executable in linux 我能够用

传递字符串
proc_open();
PHP中的

fget(stdin,"r");
在C中

;之后,我用了strtok();拆分我的字符串并将它们转换为C中的值

有没有其他方法来传递数据结构? 因为我的方式似乎不是一个好主意

1 个答案:

答案 0 :(得分:1)

在unix上,因此在linux上,text是通用接口。您可以通过stdin / stdout和参数将文本传递给脚本和二进制程序,还可以使用环境变量传递信息。您所要做的就是解析文本。但是,诸如散列映射,链表和树集等数据结构不能在不同的进程之间传递。

所以使用这种方法就像脚本和二进制程序这样的命令是经典的,之后使用文件锁定来读取文本文件数据库,这至少可以说是混乱。

然后是进程之间传递二进制数据的领域,它必须以某种通用协议进行编码。在这里,您开始使用文件管道,unix套接字和网络套接字。

我不会详细介绍每个网络套接字,即使本地环回设备今天对于通用客户端/服务器通信风格也非常受欢迎。因为允许多路复用通信并且易于携带。

我不会给你代码,你现在有大量的谷歌数据,而且每种通讯的代码都太大了。

以下是有关套接字的一些教程:

  

www.linuxhowtos.org/C_C++/socket.htm
  http://gnosis.cx/publish/programming/sockets.html

作为最后一个警告。套接字并不像stdin / stdout数据传递那么简单,因此您的需求必须足够复杂以证明套接字数据传输的合理性。

stdin / stdout适用于大多数包装情况,特别适用于胶水代码。

编辑:还有一个“第三个选项”,使用像mysql或postgres这样的数据库,其中套接字由数据库api包装。许多流行语言的API和绑定如PHP,C,java,perl,python,ruby等允许以有序和安全的方式交换进程间数据。但是你必须学习数据库api,sql,也许是一些规范化和最佳实践...你的经验和可用功能会更大但不一定更快或更容易。