2013-11-26 5 views
0

Могу ли я передать массив из perl в c без извинения чего-либо в hdd? Я мог бы сгенерировать массив в perl, сохранить его в файле и прочитать в c. Но возможно ли выполнить эту операцию только в памяти?Передача массива из perl в c

+1

Да. Вам нужно изучить «XS», взглянуть на perlxstut: http://perldoc.perl.org/perlxstut.html - альтернативно вы можете передавать данные через отдельный процесс, например, «memcached» - при условии, что вы были счастливы расширить свою C, чтобы добавить необходимую обработку клиента и формата (в Perl это проще) –

+0

, поэтому у вас есть внешний скомпилированный двоичный файл или вы хотите использовать 'C' внутри' perl'? –

+0

Я бы предпочел иметь внешний двоичный файл. Но я мог бы также использовать c внутри perl, если бы это была единственная возможность. – MaMu

ответ

5

Вы можете использовать API Perl для разговора между Perl-кодом и C, и это может произойти в памяти (не выписывая промежуточные формы на диск).

Подробная информация о различных вызовах для обработки массивов доступна с perl.org.

Помните, что содержимое массива Perl представляет собой скалярные значения Perl (SVs), а не только ints или указатели, как в массиве C, поэтому вам придется использовать Perl API для декодирования данных до чего-то, что вы можете в вашей программе C.

5

Это не похоже на вопрос о Perl или C вообще, а вопрос о том, как передавать информацию из одной программы в другую («Я бы предпочел иметь внешний двоичный файл»). Это называется inter- (IPC).

Если программа Perl запускает программу C, вы можете передать данные, используя список аргументов.

Если программа C запускает программу Perl, вы создаете канал и привязываете его к STDOUT ребенка. Программа Perl будет печатать данные в STDOUT, а программа C будет читать ее из канала.

Если ни одна из двух программ не запускает другую, сокет является очевидным решением, хотя есть много других возможностей.

Смежные вопросы