On Fri, 26 Oct 2012 18:44:04 +0100 Nick Treleaven <nick.trelea...@btinternet.com> wrote:
> On 26/10/2012 17:44, Dimitar Zhekov wrote: > > I'm using Geany on win~1 recently, with gtk+2.16 and glib-2.22 (the > > minimum versions). g_spawn_async_with_pipes() works fine for me, from a > > plugin, for a console application, along with the helper. > > So redirecting I/O works for stdout, stderr and it works for build > commands like gcc, make, grep, etc? It works between a console program and the plugin that spawned it, with {PeekNamedPipe() + read()} and {repeat write() on N ms} calls. Note that instead of EAGAIN, read() may return EINVAL, and write() may return ENOSPC. I have no idea how the higher level I/O functions respond, and I'm doing async spawn, not sync (though it shoudn't differ). One more thing you must do: HANDLE h = (HANDLE) _get_osfhandle(fd); DWORD state; if (h != INVALID_HANDLE_VALUE && GetNamedPipeHandleState(h, &state, NULL, NULL, NULL, NULL, 0)) { state |= PIPE_NOWAIT; if (SetNamedPipeHandleState(h, &state, NULL, NULL)) return TRUE; } return FALSE; for all fd-s used, otherwise read() and write() will block. > IME it sometimes works and sometimes doesn't, and it might depend on > which program is being spawned (e.g. which grep you use). I recently > checked the commits on the GLib gspawn-win32 code and there didn't seem > to be any relevant fixes. The anonymous pipe I/O under Win~1 is not marked as deprecated, but all documentation says to use overlapped I/O (which is no good for us), and the named pipe functions work on anonymous pipes only "for compatibility with MS-DOS LAN Manager" (sic!) IIRC, and may be killed any time. So it's not much of a glib problem... -- E-gards: Jimmy _______________________________________________ Devel mailing list Devel@lists.geany.org https://lists.geany.org/cgi-bin/mailman/listinfo/devel