On Apr 19, 2007, at 8:21 AM, Marcin Raczkowski wrote:
> any expirience with open4? help? pointers?
TextMate uses a hand-rolled popen3(), which is really just an open4()
clone. Allan Odgaard, the creator of TextMate, wrote the code, but
it's straightforward enough that I thought it might help you to see it:
def my_popen3(*cmd) # returns [stdin, stdout, strerr, pid]
pw = IO::pipe # pipe[0] for read, pipe[1] for write
pr = IO::pipe
pe = IO::pipe
pid = fork{
pw[1].close
STDIN.reopen(pw[0])
pw[0].close
pr[0].close
STDOUT.reopen(pr[1])
pr[1].close
pe[0].close
STDERR.reopen(pe[1])
pe[1].close
exec(*cmd)
}
pw[0].close
pr[1].close
pe[1].close
pw[1].sync = true
[pw[1], pr[0], pe[0], pid]
end
Hope that helps.
James Edward Gray II