Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

простой IPC на Perl

355
21 июля 2008 года
<SCORP>
786 / / 21.10.2006
Всем дорого времени суток!
я в перл не очень много что понимаю, поэтому большая просьба объяснить подробнее :)
я хочу сделать утилиту, которая будет вешаться демоном (при первом запуске) при последующих запусках новый instance этой же утилиты должен послать эому демону какое-то уведомление (оно будет всего одного, не будет "разных типов команд"), после чего новый instance завершает работу, а демон неким образом на уведомление реагирует.

в принципе, как сделать всё, кроме обнаружения демона и посылки ему сообщения, я представляю. хотелось бы как-то попроще реализовать механизм IPC
я в перл новичёк, поэтому просьба не пинать, а хотя бы послать по более-менее конкретным урлам в гугль
355
21 июля 2008 года
<SCORP>
786 / / 21.10.2006
я специально не стал дальше писать в первый пост - много букв часто пугают людей :)
так вот - чем это всё навеяно и зачем оно надо:
навеяно http://forum.skype.com/index.php?showtopic=109715&hl=package+SkypeAPI
а надо для того, чтобы повесить открыте\сворачивание окна скайпа на горячую клавишу :) уж сильно мне этого в линуксе не хватает! (а под форточками привык уже)

есть вот такой вот скрипт на питоне (наполовину содраный, наполовину написаный мной)
Код:
#!/usr/bin/env python
import dbus

remote_bus = dbus.SessionBus()

out_connection = remote_bus.get_object('com.Skype.API', '/com/Skype')

out_connection.Invoke('NAME SkypeToggler')
out_connection.Invoke('PROTOCOL 5')
wnd_state = out_connection.Invoke('GET WINDOWSTATE')

if 'WINDOWSTATE NORMAL' == wnd_state:
    print 'Hide'
    out_connection.Invoke('MINIMIZE')
elif 'WINDOWSTATE HIDDEN' == wnd_state:
    print 'Show'
    out_connection.Invoke('FOCUS')

он делает то что нужно - смотрит, если скайп свёрнут, показывает его, если не свёрнут, прячет. одно НО - каждый отдельный запуск этого скрипта - новое подключение к Skype API, поэтому скайпина каждый раз спрашивает "разрешить\отклонить". вот именно, чтобы вопрос задавался один раз и хочется повесить демон.
штуку skype4python видел, но мне не хочется брать какие-то ещё сторонии либы для такой плёвой задачи. и почему-то мне всё-таки больше нравиться perl ))

подскажите, плииииз! 1- очень уж интересно, 2- очень привык к хоткеям :)
2
21 июля 2008 года
squirL
5.6K / / 13.08.2003
обычно я включаю в демона вот такую функцию:
Код:
sub daemonize()
{
    open STDIN, '/dev/null' or die "Daemon: can't read /dev/null: $!";
    open STDOUT, ">>$logfile"
            or die "Daemon: can't write to $logfile: $!";
    defined(my $pid = fork) or die "Daemon: can't fork: $!";
    if($pid) {
        # parent
        open PIDFILE, ">$pidfile"
        or die "Daemon: can't write to $pidfile: $!\n";
        print PIDFILE "$pid\n";
        close(PIDFILE);
        exit;
    }
    # child
    setsid()         or die "Daemon: can't start a new session: $!";
    open STDERR, '>&STDOUT' or die "Daemon: can't dup stdout: $!";
}

после вызова которой программа "демонизируется". если надо выполнять проверку - запущен ли уже демон - проверяй наличие $pidfile.
355
21 июля 2008 года
<SCORP>
786 / / 21.10.2006
точно! то что надо. а для данного конкретного случая пинать демона можно просто сигналом каким-то (напр kill -USR1 `cat /my/pid`), а в демоне trap на этот сигнал сделать (правда, я не знаю ещё как, но это дело техники)

НО! это всё фигня, потому что оно работает и так :) вот тот скрипт, который я написал в предыдущем моём посте вешается на любимый хоткей в любимом оконном менеджере, в скайпине после первого нажатия хоткея можно смело ставить галочку "запомнить" и пользоваться этой приблудиной )) (видать я сначала просто что-то провтыкал - сразу чёт не работало.....)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог