>Тебе не нужно задавать свой ключ. Это всё равно что задавать свой
>pid для процесса.
>
>Для semop нужен id, который не равен key. id можно получить.
>
>man semop
>man IPC::Semaphore Параметр semid создается системой. Однако, чтобы разные программы могли обращаться к одному и тому же семафору, нужен ключ, который заранее известен. Например в c++ ключ для семафора создается так:
t_key semkey = 0x200;
Однако этот варинт в Perl не прокатывает. В мане написано
Create a new semaphore set associated with KEY . NSEMS is the number of semaphores in
the set. A new set is created if
*KEY is equal to IPC_PRIVATE
*KEY does not already have a semaphore identifier associated with it, and FLAGS &
IPC_CREAT is true.
>>$tkey=6664665;
>>$key = sprintf "0x%lx", $tkey;
>>$sem = new IPC::Semaphore($key, 10, S_IRWXU | IPC_CREAT);
>>
>>Семафор создается, однако при посмотре в таблице ipcs, напротив идентификатора созданного программой
>
>Создаётся 10 семафоров.
Создается одно множество из 10 семафоров.
>>семафора ключ равен 0. Подскажите пожалуйста где ошибка и как ее
>>исправить?
>
>$key должен быть равен IPC_PRIVATE, так ты создаёшь семафор.
У меня почему-то IPC_PRIVATE равен 0;
Если я где-то не прав, прошу исправить.
Спасибо.