используя общую память с php и c? - PullRequest
3 голосов
/ 25 марта 2009

Можете ли вы использовать общую память для связи между php-скриптами и c-программами в windows?

Программа c работает постоянно и использует файлы, отображенные в памяти, например:

handle1 = CreateFileMapping(
 (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, sizeof(byte)*BUFFER_SIZE, "my_foo" );

hView = (LPINT) MapViewOfFile(handle1, FILE_MAP_ALL_ACCESS, 0, 0, 0);

Для сценариев PHP я могу просто использовать приведенный ниже код, чтобы открыть файл отображения памяти, созданный программой c?

$shmkey = @shmop_open(ftok("my_foo", 'R'), "a", 0644, $buffer_size);

или файлы с отображенной памятью и разделяемая память php разные вещи?

Ответы [ 2 ]

3 голосов
/ 25 марта 2009

Функции PHP shmop - это просто оболочки для базовых функций POSIX , которые, похоже, недоступны под окнами.

Из руководства по PHP :

Примечание. Версии Windows, предшествующие Windows 2000, не поддержка общей памяти. Под виндой Shmop будет работать только когда PHP работает как модуль веб-сервера, такой как Apache или IIS (CLI и CGI не будут работа).

Очевидно, PHP эмулирует это поведение в apache, но, поскольку он не доступен в отдельных двоичных файлах, он вряд ли будет интегрироваться с эквивалентами Windows.

0 голосов
/ 17 ноября 2009

Я хотел позволить PHP получить доступ к общей памяти, которая была создана и записана приложением Windows. Я добился этого, создав собственное расширение php (называемое php_gsect.dll). Возможно, это не то, что вам нужно, но мой php_gsect присоединяется к глобальному разделу и читает (или записывает) ряд байтов, которыми я затем могу манипулировать

К вашему сведению: мое приложение Windows извлекает данные динамического тренда из другой системы и помещает данные в именованный глобальный раздел. Веб-страница php обращается к данным из глобального раздела и создает диаграмму (используя библиотеку диаграмм ESJ).

...