PDA

Просмотреть полную версию : Работа с Shared Memory в PHP


Max2114
21.06.2013, 12:55
А не подскажете где прочитать про работу PHP с распределяемой памятью?

Arsie
21.06.2013, 13:16
А не подскажете где прочитать про работу PHP с распределяемой памятью?

Самое доступное - в интернете. Я обычно использую Гугл. Но можно использовать абсолютно любой поисковик.

Механизм разделяемой памяти (http://ru.wikipedia.org/wiki/Shared_Memory) не мы придумали.

Чуть подробнее в английской версии (http://en.wikipedia.org/wiki/Shared_memory).

Но вообще вне конкуренции домен PHP.su (http://www.php.su/functions/?cat=shmop)

Max2114
24.06.2013, 14:46
Самое доступное - в интернете. Я обычно использую Гугл. Но можно использовать абсолютно любой поисковик.

Механизм разделяемой памяти (http://ru.wikipedia.org/wiki/Shared_Memory) не мы придумали.

Чуть подробнее в английской версии (http://en.wikipedia.org/wiki/Shared_memory).

Но вообще вне конкуренции домен PHP.su (http://www.php.su/functions/?cat=shmop)
раз уж об этом заговорили:
как я понял для обращения в Shared memory средствами php Нужно:
1. Открыть Shared Memory для чтения типа того:
<?php
$shm_id = shmop_open(0x0fff, "c", 0644, 100);
?>
где 0х0fff key системный id для блока shared memory, этот параметр может передаваться как 10-ричный или 16-ричный
2. прочитать переменную:
<?php
$shm_data = shmop_read($shm_id, 0, 50);
?>
где 0 - стартовый адрес, 50 - количество байт
У вас в файле «load_files.srv» появляется перечень переменных Shared Memory с информацией наподобии:
var1=0x134,4,3,8,Parameter
где:
0x134 – адрес переменной в адресном пространстве ядра «logix»
4 – размер переменной в байтах
3 – тип данных переменной в среде «SMLogix» - float (real)
В среде « SMLogix » встречаются типы данных:
• 0 – bool
• 1 – int (тип short int – 2 байта в «C/С++»)
• 2 – long
• 3 – real (тип float в «C/С++»)
8 – адрес переменной в адресном пространстве разделяемой памяти контроллера «/dev/shm/wsi»
Parameter – имя (идентификатор) переменной
таким образом я "встал в тупик". Где мне взять системный id для блока shared memory (для PHP)?

Arsie
24.06.2013, 15:01
раз уж об этом заговорили:
как я понял для обращения в Shared memory средствами php Нужно:
[...]
таким образом я "встал в тупик". Где мне взять системный id для блока shared memory (для PHP)?

http://forum.segnetics.com/showthread.php?t=646 - это возможно :)

http://forum.segnetics.com/showthread.php?t=995 - а тут похоже ответ на ваш вопрос.

Max2114
24.06.2013, 15:12
http://forum.segnetics.com/showthread.php?t=646 - это возможно :)

http://forum.segnetics.com/showthread.php?t=995 - а тут похоже ответ на ваш вопрос.
Нет там ответа на мой вопрос!
Я не хочу писать данные в еще один файл на С++ и брать потом их оттуда при помощи HTML (как сделано у вас в примере)... я хочу забрирать напрямую из Shared Memory при помощи функциц PHP и застопорился я на том, что не знаю как найти key (идентификатор) переменной...
Попробова найти KEY при помощи ftok вот так
$shm_key = ftok('/dev/shm/wsi', 'temp_vnesh');
получил в ответ -1
Перменную по этому ключу в ответ естественно не получил.
а если попросить вот так:
$shm_key = ftok('/dev/shm/wsi', 't');
то возвращает
1947205880

Max2114
24.06.2013, 15:48
Нет там ответа на мой вопрос!
Я не хочу писать данные в еще один файл на С++ и брать потом их оттуда при помощи HTML (как сделано у вас в примере)... я хочу забрирать напрямую из Shared Memory при помощи функциц PHP и застопорился я на том, что не знаю как найти key (идентификатор) переменной...
Попробова найти KEY при помощи ftok вот так
$shm_key = ftok('/dev/shm/wsi', 'temp_vnesh');
получил в ответ -1
Перменную по этому ключу в ответ естественно не получил.
а если попросить вот так:
$shm_key = ftok('/dev/shm/wsi', 't');
то возвращает
1947205880
Разбираюсь дальше... понял что второй аргумент в функции ftok - это однобайтовый ID переменной. Подвился вопрос где брать его :( (т.е. если пишу один символ типа a, 6, 8 - то возвращает какой-то Key) а вот какой, и как вернуть нужный - пока непонятно.

Arsie
24.06.2013, 16:02
Разбираюсь дальше... понял что второй аргумент в функции ftok - это однобайтовый ID переменной. Подвился вопрос где брать его :( (т.е. если пишу один символ типа a, 6, 8 - то возвращает какой-то Key) а вот какой, и как вернуть нужный - пока непонятно.

Для того чтобы получить ключ, надо передавать символ 'b' в качестве второго параметра, т.е. так:

$shm_key = ftok('/dev/shm/wsi', 'b');