【问题标题】:Passing data structures between C executable and PHP in Linux?在 Linux 中的 C 可执行文件和 PHP 之间传递数据结构?
【发布时间】:2011-11-28 10:54:06
【问题描述】:

在我之前的问题中: Passing data between PHP and C executable in linux 我能够传递字符串

proc_open();

在 PHP 中和

fget(stdin,"r");

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

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

【问题讨论】:

  • 这听起来越来越像家庭作业 :) 是吗?
  • 不是真的,我试图使用 FFT 和 PHP 的其他东西进行图像处理,发现 PHP 太慢了,无法执行 FFT 和图像相关任务,所以我决定切换到 C .出现问题,最终结果必须通过浏览器显示..
  • 无论如何,这是我的个人小项目...
  • 很公平......好吧,有几种方法可以传递数据。最简单的方法是通过命令行或在文件中执行此操作,但如果我正确阅读了您之前的问题,您正在传递一大堆数据?
  • 是的,我试图传递整个图像数组(我已经把它们变成了一个长字符串)

标签: php c string data-structures stdin


【解决方案1】:

在 unix 和 Linux 上,文本是通用接口。您可以通过标准输入/标准输出和参数将文本传递给脚本和二进制程序,也可以通过环境变量传递信息。您所要做的就是解析文本。但是哈希映射、链表和树集等数据结构不能在不同的进程之间传递。

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

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

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

我不会给你代码,你现在有大量的数据可以用谷歌搜索,每种通信的代码都太大了。

这里有一些关于套接字的教程:

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

最后一个警告。套接字不像标准输入/标准输出数据传递那么简单,因此您的需求确实必须足够复杂,才能证明使用套接字数据传输是合理的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多