The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Perl и ключ для семафора"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Perl и ключ для семафора"  
Сообщение от Vankovski email(??) on 29-Авг-06, 10:19 
Здаравствуйте.
Появилась такая проблема: не могу задать для семафора свой ключ.

$tkey=6664665;
$key = sprintf "0x%lx", $tkey;
$sem = new IPC::Semaphore($key, 10, S_IRWXU | IPC_CREAT);

Семафор создается, однако при посмотре в таблице ipcs, напротив идентификатора созданного программой семафора ключ равен 0. Подскажите пожалуйста где ошибка и как ее исправить?

Спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Perl и ключ для семафора"  
Сообщение от ACCA (ok) on 30-Авг-06, 00:47 
>Здаравствуйте.
>Появилась такая проблема: не могу задать для семафора свой ключ.

Тебе не нужно задавать свой ключ. Это всё равно что задавать свой pid для процесса.

Для semop нужен id, который не равен key. id можно получить.

man semop
man IPC::Semaphore


>$tkey=6664665;
>$key = sprintf "0x%lx", $tkey;
>$sem = new IPC::Semaphore($key, 10, S_IRWXU | IPC_CREAT);
>
>Семафор создается, однако при посмотре в таблице ipcs, напротив идентификатора созданного программой

Создаётся 10 семафоров.

>семафора ключ равен 0. Подскажите пожалуйста где ошибка и как ее
>исправить?

$key должен быть равен IPC_PRIVATE, так ты создаёшь семафор.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Perl и ключ для семафора"  
Сообщение от Vankovski email(ok) on 30-Авг-06, 10:48 
>Тебе не нужно задавать свой ключ. Это всё равно что задавать свой
>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;

Если я где-то не прав, прошу исправить.
Спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Perl и ключ для семафора"  
Сообщение от Vankovski email(ok) on 30-Авг-06, 15:16 
Пробелему решил.
Вот программа, которая создает множество из $nsems семафоров с ключом $IPC_KEY:

#!/usr/bin/perl
use IPC::SysV qw(IPC_STAT IPC_PRIVATE);
use IPC::Semaphore;
    
    $nsems = 10;
    $IPC_KEY = 0x12340000;
    $IPC_CREATE = 0001000;
    $key = new IPC::Semaphore($IPC_KEY, $nsems , 0666 | $IPC_CREATE );
    die if !defined($key);
    print "$key\n";

Тему счетаю закрытой.
Всем спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру