ftok(), shared memory

Voyager2K

Новичок
ftok(), shared memory

И так, люди добрые... ;) Поясните мне, такому малопросвященному, что есть что.

Для исползовния shmop_*() функций требуется сначала объявить область памяти т.е. указать некий ключ, режим, права и величину. Назначение всего кроме первого более менее понятно хотя с размером то же возникают вопросы.

Что же подразумевается под этим понятием ключа т.е. первого аргумента ф-ции shmop_open ? Порыл в инете :
нашел от таких смехатворно ни о чем не говорящих ответах моих на вопросы моих сотоварищей по незнанию:
http://www.linux.ru/conf/read.php?f=5&i=3263&t=3262
до описания понятия System V IPC:
http://www.sao.ru/hq/sts/linux/doc/lpg_rus/lpg_rus.html#G64

Однако еще куча вопросов все же никуда не девается:

1. действительно ли это представляет из себя лишь некий специфический идентификатор который можно выбрать себе как константу для последующего использования ?

2. Если у каждого объекта в линухе (а как в винде все это пашет тогда?) свой идентфикатор , как я понял он выглядит в стиле 0x0fff ,да плюс еще доп ключ в виде одной буквы, то это не так уж и много для поисания все возможных объектов в системе.

3. Если я себе выберу любой такой ключ, то я не могу быть уверен, что что-то другое потом не будет конфликтовать ?

4. Если я через ftok() передам некий файл, то получу УНИКАЛЬНЫЙ ключ и могу не беспокоится ? Или же в случае обращения в файлу любого приложения оно для своих нужд получит такой же ключ и получится неразбериха ?

5. Имеет ли значение какой файл передать ftok'у ?

6. Что подразумевается под разм еов в байтах блока памяти "расшаряного" ? Т.е. Это область в оперативке сразу помечается как занятая и другими приложениями использоваться не будет ? Е если не известно сколько в следующую минуту понадобится памяти 1-2 мб или 30-40 мб, то что ? Нельзя ли динмически выделять память ?



Вопросов дофига и полной кашей... ;(
 

si

Administrator
1 - да
2 - в винде shm* нету вообще
3 - не можешь
4 - если кто-то в аещл передать тот же файл, он получит тот же ключ.
5 - от этого зависит какой он вернет id
6 - динамически по-моему нельзя, на счет остального надо курить мануалы.
 

.des.

Поставил пиво кому надо ;-)
2 - в винде shm* нету вообще
Note: Versions of Windows previous to Windows 2000 do not support shared memory. Under Windows, Shmop will only work when PHP is running as a web server module, such as Apache or IIS (CLI and CGI will not work).
 

Voyager2K

Новичок
В любом случае сейчс уже у всех ХР-шки(нт ветвь рулит) стоят и значит усе работает, ибо у меня шареная память на локальном серваке пашет ;)

Как вы тогда берете идентифиакторы для памяти дабы быть увереным что никто не будет конфликтовать и брать такой же id ? (Если плаинруется использования блока памяти постоянно на протяжении всего времени работы сервера для хранения временной информации).

Видел классы shmop'а, так там в качестве папки передается '.' т.е. рутовская директория, как я понимаю. Насколько такой подход оправдан ?

-~{}~ 07.01.06 02:11:

Что никто никогда особо не использовал шаренную память ? Может есть альтернативы какие ?


ЗЫ. пред пост "рутовская директория" => имелась ввиду текущая дира
 

voodoo

Новичок
ну в *nix-ах есть полезная команда ipcs -- покажет занятые IDs
а чтобы никто не лез, расставить соотв. права (хотя если пхп как модуль и все работают из под пользователя www, то это не поможет)
 
Сверху