Hello,

  The following is a post by Brian Dessent on the MinGW-Users
  mailing list.  People thinking about vim and consoles/ptys on
  Windows might find it interesting.  

  --Suresh

  >> http://msdn2.microsoft.com/en-us/library/ms740141.aspx
  >
  > So how do I do a 'select' on stdin of the parent and the 
  > stdout of the child?  

  [following is from Brian Dessent on the MinGW-Users list]
  
  I'm not sure I quite understand the context here.  If you just
  want to spawn a child process and read its stdout (or write its
  stdin) over a pipe, then you can just use the standard popen:
  <http://msdn2.microsoft.com/en-us/library/96ayss4b(VS.80).aspx>.
  This is somewhat of an abstraction from the Win32 calls, so if you
  want to see how to do it directly with Win32 then have a look at:
  <http://msdn2.microsoft.com/en-us/library/ms682499.aspx>.
  
  But if I'm understanding correctly that's not what you want -- you
  have multiple read inputs that you need to multiplex?  In that
  case you will probably need to use WaitForMultipleObjects(), which
  is somewhat of an analog to the POSIX select():
  <http://msdn2.microsoft.com/en-us/library/ms687025.aspx>.  
  Note however that the list of types of objects that WFMO can
  accept does not include files or pipes:
  
      * Change notification
      * Console input
      * Event
      * Memory resource notification
      * Mutex
      * Process
      * Semaphore
      * Thread
      * Waitable timer
  
  (also note that "Console input" means direct input from a console,
  i.e.  the user typed something.  Consoles are sort of like the
  Win32 equivalent of ptys, but they are not "pseudo" -- they
  represent an actual console, i.e. what you see when you click on
  "Command Prompt" in the start menu.  If you have a child spawned
  with stdin/stdout redirected then GetStdHandle returns a pipe
  handle, so you can't use the console API on them in that case.  I
  suppose if you really wanted to be tricky you could achieve
  something like a pty by creating a new console with its window
  hidden off-screen, launching your child attached to that console,
  and then using the Win32 console API to read and write to it. 
  This is, incidently, what the Console project
  <http://sourceforge.net/projects/console/> does to provide a
  prettier interface (multiple tabs, sane copy/paste, better font
  selection, etc) for Win32 consoles while still having the programs
  being run think they are attached to a real console, instead of a
  pipe.)
  
  In order to select on files and pipes, you have to use
  asynchronous (aka overlapped) I/O, which is kind of like what
  POSIX calls non-blocking I/O:
  <http://msdn2.microsoft.com/en-us/library/ms686358.aspx>.  
  MSDN has an example of doing this with named pipes:
  <http://msdn2.microsoft.com/en-us/library/aa365603.aspx>.  
  Note that Win32 named pipes are more like what POSIX calls fifos.
  Win32 anonymous pipes are the kind that are usually used for
  redirection and follow pretty closely to what POSIX calls a pipe.
  


--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui