This is the mail archive of the
cygwin@sourceware.cygnus.com
mailing list for the Cygwin project.
Right way in Win32 to redirect child process stdout?
- To: gnu-win32 at cygnus dot com
- Subject: Right way in Win32 to redirect child process stdout?
- From: "Igor boukanov" <boukanov at fi dot uib dot no>
- Date: 1 Oct 1998 08:59:47 -0000
Hello!
Probably this message is out of topic but...
I need to create a process with redirected output by the mean of Win32 API. Unfortunately, a straightforward approach:
...
HANDLE old = GetStdHandle(STD_OUTPUT_HANDLE);
SetStdHandle(STD_OUTPUT_HANDLE, redirection_handle);
CreateProcess(...);
SetStdHandle(STD_OUTPUT_HANDLE, old);
...
does not work in multithreading program because there is a chance that some thread will write to stdout between SetStdHandle and CreateProcess
spoiling child output to redirection_handle.
A mutex will not help here because it would mean that each and every use of STD_OUTPUT_HANDLE should be under that mutex and of cause any library with printf should be modified. It is
just impossible.
I saw several examples with "solutions" like increasing priority of the thread with CreateProcess to maximum and creating
child process in a suspense state to minimize the execution time between SetStdHandle and CreateProcess but it just hides the problem.
But maybe there is a truly robust way to do that?
Regads, Igor Boukanov
boukanov@fi.uib.no
-----
Free e-mail group hosting at http://www.eGroups.com/
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".