egy program mar elinditott peldanyanak vezerlese

Fórumok

Pelda arra, amit keresek: Sonata zenelejatszo
elinditom: sonata, fut. Kesobb parancssorbol: sonata [play pause stb...]-re a mar elinditott programot manipulalom.
Hogyan lehet ezt szepen elegansan elkesziteni?
DBUS megcsinalja, de szerintem agyuval verebre. illetve a sonata Pythonban irodott, engem meg c/c++ megoldas erdekelne. (mielott vki beirja, hogy "olvasd el!")

Hozzászólások

Hi!

Anno nekem is pont ilyenre volt szükségem mplayerhez, amihez a popen() függvényt használtam sikeresen. Link .

Legegyszerűbben signallal lehet jelezni egy programnak.
kill (1) - send a signal to a process
kill (2) - send signal to a process
jelzéskezelő regisztrálás:
sigaction (2) - examine and change a signal action

Mit is szeretnél? Processzek közti kommunikációt, azaz Inter-process communication-t. Lásd Wiki.

A D-BUS annyira nem ágyúval verébre, hogy erre van kitalálva.
Előnye, hogy a vezérlést később bármilyen más programból, bármilyen nyelven, könnyen meg lehet oldani.

Amit még használhatsz erre az a Shared Memory, illetve a Socket, de szerintem a D-BUS a legtisztább legszárazabb érzés.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

> de sokkal jobb, mintha lekillezne a processzt

nyilvan ertelmes ember ugy irja meg a progijat, hogy a szamara erdekes megszakitasokat lekezeli. Ebben az esetben nem "lekillezni" fogja, hanem uzenetet kuld neki. Lasd pl. a SIGUSR1 es SIGUSR2 szignalokat, amik kifejezetten ilyesmire vannak "javasolva". De ket program majdnem barmilyen szignal segitsegevel kommunikalhat. Pl. egy daemon-kent (~hatterben) futo progi realisan sosem kap SIGHUP -ot, kovetkezeskent jol hasznalhato bizonyos esemenyek jelzesere. Lasd init, sendmail, bind, inetd, csak hogy az ismertebbeket soroljam.

Koszonom szepen a valaszokat, szerintem nekem is a kill-es lesz a megoldas.

Talan me'g a UNIX domain socket lehet celravezeto", ilyen szigoruan localhost-on futtatott programok vezerlesere. Az XMMS pl igy csinalja (/tmp/xmms_$USER.$SCREEN nev" socket-en), ez nem annyira agyu-vereb.