in reply to Named pipes on Win32

If there is indeed a child-parent relationship, there's no need for the pipes to be named. IPC::Open2 or IPC::Run spawns the child and provides unnamed pipes to it. (The child access the pipes as STDIN and STDOUT.) Using that module saves you the trouble of doing your own forking and of opening your own pipes.

That said, you can't use select on pipes in Windows, so pipes are quite useless. Without select (or threads), the parent could block waiting on one child while another child wishes to speak to the parent, or the parent could block waiting for output from a child while the child is waiting for input from the parent.

I recommend sockets instead. Using 'select' to handle multiple sockets provides an event loop, but I don't know how to integrate into Tk's event loop (having no Tk experience whatsoever).

Replies are listed 'Best First'.
Re^2: Named pipes on Win32
by jdtoronto (Prior) on Jun 15, 2006 at 16:59 UTC
    I would have thought that the blocking issue would be resolved by the PARENT using the peek() method to see if there is something to get from the pipe?

    Sockets have, sadly, become pretty useless in Win32 environments these days - certianly in end user ones. A selection of totally brain dead Windows firewall and security software interferes with sockets unmercifully. Anyone using a socket must be a hacker with ill intent after all, mustn't they?

    Integrating into the Tk event loop isn't rocket science, the process is well documented.

    jdtoronto

      You can also use Peek() on anonymous pipes, though you will need to access the underlying API PeekNamePipe() via Win32::API. Just pass the anonymous pipe handle in place of the named pipe handle and it works fine.

      It would not be a huge problem to use this to allow select work with anonymous pipes on Win32. It would just require someone who is prepared to jump through the p5p hoops to go in and implement it.

      My own experience of attempting to use Win32::Pipe has been less than satisfactory, mostly because of the limited set of the NamedPipe API set that it supports. I found it easier to use Win32::API to gain access to the underlying API's.


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.