g_spawn & g_io_channel: part II
- From: Vladimir Djokic <vladeck sezampro yu>
- To: GTK App Devel <gtk-app-devel-list gnome org>
- Subject: g_spawn & g_io_channel: part II
- Date: Tue, 02 Mar 2004 21:26:53 +0100
Good day,
Developers. I tried looking at the Anjuta source, I tried reading
the docs, and tried some googleing around. But, when I tried to do it, I
realized: I'm DUMB ^_^
There's a code in attachment, if someone can give me a hint: all I
want is to start a shell command and print out its stdout and stderr values.
Thank You,
Vladimir.
--
"This is it... This is where I belong... "
#include <glib.h>
static gboolean stdout_read( GIOChannel *source, GIOCondition condition, gpointer data );
static gboolean stderr_read( GIOChannel *source, GIOCondition condition, gpointer data );
int main( int argc, char *argv[] )
{
const char *cmd[20];
int i = 0;
int stdout_pipe;
int stderr_pipe;
int pid;
GError *error;
GMainLoop *loop;
guint stdout_tag, stderr_tag;
GIOChannel *channel;
gtk_init( &argc, &argv );
i = 0;
cmd[i++] = "ls";
cmd[i++] = "-lh";
cmd[i++] = "/var/log/packages";
cmd[i++] = NULL;
error = NULL;
if ( !g_spawn_async_with_pipes( NULL,
(char **)cmd,
NULL,
G_SPAWN_SEARCH_PATH,
NULL, NULL,
&pid,
NULL,
&stdout_pipe,
&stderr_pipe,
&error ) ) {
g_warning( "command failed: %s\n", error->message );
g_error_free( error );
} else {
loop = g_main_loop_new( NULL, FALSE );
channel = g_io_channel_unix_new( stdout_pipe );
/*g_io_channel_set_encoding( channel, NULL, NULL );*/
stdout_tag = g_io_add_watch( channel,
( G_IO_IN | G_IO_HUP | G_IO_ERR ),
stdout_read,
NULL );
g_io_channel_unref( channel );
channel = g_io_channel_unix_new( stderr_pipe );
/*g_io_channel_set_encoding( channel, NULL, NULL );*/
stderr_tag = g_io_add_watch ( channel,
( G_IO_IN | G_IO_HUP | G_IO_ERR ),
stderr_read,
NULL );
g_io_channel_unref( channel );
/*g_main_loop_run( loop );
g_main_loop_unref( loop );
g_source_remove( stdout_tag );
g_source_remove( stderr_tag );*/
}
gtk_main();
return 0;
}
static gboolean stdout_read( GIOChannel *source, GIOCondition condition, gpointer data )
{
char *line;
GIOStatus status;
status = g_io_channel_read_line( source,
&line, NULL, NULL, NULL);
if ( status == G_IO_STATUS_NORMAL ) {
g_free( line );
}
g_print( "STDOUT: %s\n", line );
return TRUE;
}
static gboolean stderr_read( GIOChannel *source, GIOCondition condition, gpointer data )
{
char *line;
GIOStatus status;
status = g_io_channel_read_line( source,
&line, NULL, NULL, NULL);
if ( status == G_IO_STATUS_NORMAL ) {
g_free( line );
}
g_print( "STDERR: %s\n", line );
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]