Передача структур данных между исполняемым файлом C и PHP в Linux? - PullRequest
1 голос
/ 28 ноября 2011

в моем предыдущем вопросе: Передача данных между исполняемым файлом PHP и C в Linux я смог передать строки с

proc_open();

в PHP и

fget(stdin,"r");

в С ; после этого я использовал strtok (); разделить мою строку и превратить их в значения в C

Есть ли другие способы передать структуру данных? так как мой путь не кажется хорошей идеей

1 Ответ

1 голос
/ 28 ноября 2011

В Unix и, следовательно, в Linux, текст является универсальным интерфейсом.Вы можете передавать текст через stdin / stdout и параметры в скрипты и двоичные программы, а также передавать информацию с помощью переменных среды.Все, что вам нужно сделать, это разобрать текст.Но структуры данных, такие как хэш-карты, связанные списки, наборы деревьев и т. Д., Нельзя передавать между различными процессами.

Таким образом, использование этих методов является классикой команд, таких как сценарии и двоичные программы, после чего используется блокировка файлов.читать базы данных с текстовыми файлами, что, по меньшей мере, беспорядочно.

А затем - область передачи двоичных данных между процессами, которые ДОЛЖНЫ быть закодированы в некотором общем протоколе.Здесь вы начинаете играть с файловыми каналами, unix-сокетами и сетевыми сокетами.

Я не буду вдаваться в подробности каждого из них, сетевых сокетов, даже локальное петлевое устройство очень популярно сегодня для универсального клиент-серверного стиля общения.потому что позволяет мультиплексировать коммуникации и легко переносима.

Я не буду давать вам код, у вас сейчас достаточно данных для Google, и код для каждого вида связи будет слишком большим.

Вот несколько уроков по сокетам:

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, может быть, некоторые нормализации и лучшие практики ... Ваш опыт и доступные функции будут больше, но не обязательно быстрее или проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...