Re: Distinguish between G_IO_ERR and G_IO_HUP
- From: Tim Müller <zen18864 zen co uk>
- To: gtk-app-devel-list gnome org
- Subject: Re: Distinguish between G_IO_ERR and G_IO_HUP
- Date: Mon, 30 May 2005 13:51:16 +0100
On Monday 30 May 2005 13:31, Colossus wrote:
I'm trying to catch the returned error message of the unzip
executable with GIOChannel. I use g_spawn_async_with_pipes and
then I create a GIOChannel and then i call g_io_add_watch. I run
unzip with an incomplete zip file so the unzip executable
fails with an error message but the G_IO_ERR condition is never met,
while the G_IO_HUP is met when both the pipe ends and when the unzip
returns an error; how can I distinguish the two conditions so to have
my application emits an appropriate gtk_dialog with an error message
when unzip fails to open the zip archive ?
The G_IO_ERR condition only occurs if there is an error on the pipe/iochannel.
It has nothing to do with the child program being executed. To catch an error
in your spawned unzip program, you'll need to:
* pass the G_SPAWN_DO_NOT_REAP_CHILD flag to g_spawn_*
* watch the child yourself via g_child_watch_add ()
When the child exits, the callback function you passed to g_child_watch_add()
is called with the exit status of the child, which will tell you if the child
exited with an error or not. On unix, you'll need the macros described in the
waitpid manpage to interpret the exit code (e.g. if (WIFEXITED(status) &&
WEXITSTATUS(status) == EXIT_SUCCESS) then it's a normal exit, otherwise there
was an error or the program received a fatal signal). No idea how to
interpret the exit code on win32.
Alternatively, or in addition, you could just watch stderr for messages, and
assume that an error has occured if unzip prints a message to stderr.
Cheers
-Tim
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]