glib - spawn process & pipe
kratochvil jiri
kratochvil na dbsystem.com
Středa Listopad 26 19:10:33 CET 2003
On Wed, Nov 26, 2003 at 05:14:22PM +0100, kratochvil jiri wrote:
> On Wed, Nov 26, 2003 at 03:21:44PM +0100, Jan Horák wrote:
> > Podivejte se na zdrojak 'qmail-start.c' ze zdrojaku qmailu z adesy
> > http://www.qmail.org
> > QMail takhle komunikuje uplne porad a ma to reseny dost elegantne a
> > spolehlive :-)
>
> Diky, princip znam. Slo mi spis o to jestli to jde udelat pres funkce
> glib, nebo Jestli si to mam udelat primo pres sytemovy volani.
Takze mam reseni, kdyby to nekoho zajimalo tak je prilozen zdrojak, je
to trosku neucesane a neresi to uvolnovani resources, ale je naznacen
princip.
--
KLoK
//////////////////////////////////////////////////////////
#include <glib.h>
#include <unistd.h>
char* (grab[]) = { "cdparanoia" , "-qZ", "1", "-", NULL};
char* (play[]) = { "play" , "-t wav", "-", NULL};
gint p[2];
void connect(gpointer data)
{
gint i = (gint)data;
switch(i)
{
case 1:
close(p[0]);
dup2(p[1],1);
break;
case 2:
close(p[1]);
dup2(p[0],0);
break;
default:
g_assert_not_reached();
}
}
int main()
{
//gint i,o;
pipe(p);
g_spawn_async_with_pipes(NULL,
grab,
NULL,
(GSpawnFlags)(G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD),
connect,
(gpointer)1,
NULL,
NULL,
NULL,
NULL,
NULL);
g_spawn_async_with_pipes(NULL,
play,
NULL,
(GSpawnFlags)(G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD),
connect,
(gpointer)2,
NULL,
NULL,
NULL,
NULL,
NULL);
g_main_loop_run (g_main_loop_new(g_main_context_default(),TRUE));
}
Další informace o konferenci Linux