[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Bi-directional pipe?

Brian Candler

3/13/2007 8:15:00 PM

Is there any standard Ruby way of creating a bidirectional pipe or
socketpair?

I want to pass a single IO-like object around, but to be able to both read
and write from the other end. (What I'm actually trying to do is to put a
facade around Net::SSH so that the command channel can be passed in as a
proxy to Net::Telnet, but I can think of other uses of this)

IO.popen(..., "w+") does make such a bidirectional pipe, but as far as I can
see only for communicating with a child process.

Any ideas?

Thanks,

Brian.

5 Answers

Rob Biedenharn

3/13/2007 8:29:00 PM

0

On Mar 13, 2007, at 4:15 PM, Brian Candler wrote:
> Is there any standard Ruby way of creating a bidirectional pipe or
> socketpair?
>
> I want to pass a single IO-like object around, but to be able to
> both read
> and write from the other end. (What I'm actually trying to do is to
> put a
> facade around Net::SSH so that the command channel can be passed in
> as a
> proxy to Net::Telnet, but I can think of other uses of this)
>
> IO.popen(..., "w+") does make such a bidirectional pipe, but as far
> as I can
> see only for communicating with a child process.
>
> Any ideas?
>
> Thanks,
>
> Brian.

rd, wr = IO.pipe

comes to mind.

-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com




Ara.T.Howard

3/13/2007 8:36:00 PM

0

Brian Candler

3/13/2007 9:00:00 PM

0

On Wed, Mar 14, 2007 at 05:29:16AM +0900, Rob Biedenharn wrote:
> On Mar 13, 2007, at 4:15 PM, Brian Candler wrote:
> >Is there any standard Ruby way of creating a bidirectional pipe or
> >socketpair?
> >
> >I want to pass a single IO-like object around, but to be able to
> >both read
> >and write from the other end. (What I'm actually trying to do is to
> >put a
> >facade around Net::SSH so that the command channel can be passed in
> >as a
> >proxy to Net::Telnet, but I can think of other uses of this)
> >
> >IO.popen(..., "w+") does make such a bidirectional pipe, but as far
> >as I can
> >see only for communicating with a child process.
> >
> >Any ideas?
> >
> >Thanks,
> >
> >Brian.
>
> rd, wr = IO.pipe
>
> comes to mind.

That's a *unidirectional* pipe. At least, all the rdoc stuff says that one
end is a reader and the other end is a writer.

Brian Candler

3/13/2007 9:01:00 PM

0

On Wed, Mar 14, 2007 at 05:35:52AM +0900, ara.t.howard@noaa.gov wrote:
> On Wed, 14 Mar 2007, Rob Biedenharn wrote:
>
> >On Mar 13, 2007, at 4:15 PM, Brian Candler wrote:
> >>Is there any standard Ruby way of creating a bidirectional pipe or
> >>socketpair?
>
> require 'socket'
> Socket.pair ....


irb(main):015:0> require 'socket'
=> true
irb(main):016:0> a = Socket.pair
ArgumentError: wrong number of arguments (0 for 3)
from (irb):16:in `pair'
from (irb):16
from :0

OK, so it exists, it's just not documented in ri - time to grep the source I
guess. Thanks for the pointer.

Ara.T.Howard

3/13/2007 9:12:00 PM

0