kulso program vezerlese c programbol

Fórumok

sziasztok!

olyan c programot szeretnk irni, amely segitsegevel egy masik, mar meglevo programot
vezerelhetek.

bovebben mondjuk van egy parancssoros mp3 lejatszo, es az megoldhato-e, hogy az inditasat,
leallitasat, billentyuzet esemenyeit (pl. p gomb - pause) egy sajat c programbol valtsam ki?

esetleg ha tudna valaki egy linket dobni, ha ez megvalosithato, nagyon megkoszonnem.

udv: szg.

Hozzászólások

Indítás/leállítás nyilván nem gond, de a bill eseménnyel már gond lehet.

Biztos kell ez neked?
mp3 fájlok lejátszásához inkább keress egy libet.

Esetleg nézz utána, hogy a programot lehet-e vezérelni pipe-on keresztül.

Bill események kiváltására én nem tudok ultimate megoldást (de ettől még lehet, hogy van).

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

A popen(3) fuggveny pont erre jo. Elindit egy parancsot, kapsz egy file descriptort, amivel tudsz irni a C programodbol a program stdin-jere VAGY tudsz olvasni a stdout-jarol, a ketto egyutt nem megy.

Ketiranyu kapcsolatot ugy tudsz letrehozni, hogy a C programodbol 2 pipe-ot hozol letre a ket iranyhoz (azaz osszesen 4 fd) es fork()-olsz, a parent-ben es a child-ben is lezarod a nem hasznalt fd-ket (2-2), a child-ban dup2()-vel a ket hasznalt pipe vegpontot a stdin-re es stdout-ra mappeled, majd az exec() csalad valamely fuggvenyevel betoltod a child-ban a vezerelni kivant programot. (huh, szep mondat lett)

A google-n az elso talalat ez volt: http://www.unixwiz.net/techtips/remap-pipe-fds.html

Ez a legutolso lepes kivetelevel epp ezt csinalja.

koszonom szepen mindenkinek a segitseget, utanajarok.

ha konkrétan mp3 lejatszás a téma, akkor mondjuk mpd ?

Pl. az mpg123 es a ximp3 olyan, hogy tudsz veluk kommunikalni, nem kell gomblenyomassal es hasonlokkal jatszani (konkretan en mar irtam is hozzajuk frontend-et). Az amarok, xmms pedig siman vezerelheto akar parancssorbol is, eleg a man-jukat megnezni.

az mp3 lejatszast csak peldanak irtam, igazabol az mPlayer-hez kene. szeretnek tobb videot egymas utan lejatszani, de ugy, h lejatszas kozben kicsit mashogy mukodjon a cucc. ha pl. pause-t nyomok, akkor ne az aktualis pontban alljon le, hanem az aktualis klip vegen.

+ gond, h minden egyes klipnel leall ill. ujraindul az mplayer, ezen is pocsolok jelenleg, mert a legjobb lenne egy total fekete hatter atvezetesnek, es h 1 mplayer jatsza az egeszet le, ne mindig uj nyiljon...

erre esetleg valakinek van tippje?

mplayernek van erre egy -slave kapcsolója, ezután egyszerű parancsokkal vezérelheted az stdin-jén keresztül (ld. "SLAVE MODE PROTOCOL"). Ez direkt ilyesmire van kitalálva.
Én már láttam mplayer frontendet, ami nem új ablakban indította a videót, tehát vhogy megoldható (ha másképp nem, nézd meg a forrását egy ilyennek).

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