Need a 2-way alternative to popen()
    Michael Frank 
    bugboy at portia.Stanford.EDU
       
    Sun Feb 25 22:32:51 AEST 1990
    
    
  
I'm writing a program, and I want it to be able to do two-way
communication with a csh process; it will occasionally type commands
to the csh and read csh's output.  I thought that
	popen("csh", "r+") 
might work, but I tried it, and it doesn't allow writing.  Well,
	popen("csh","w") 
allows me to write commands to the csh, but how can I
get its output to come to me instead of going to stdout?  I could do
	popen("csh > out","w"),
and read the output file as it's being written, but then I have to
worry about the file growing indefinitely.  I'd like to be able to
just have the output available in a pipe.  Well, popen() uses sh, and
the sh doc says something about redirecting to a file descriptor using
>&, so I thought I could do
	popen("csh >&4", "w");
where 4 was the file descriptor of one end of a pipe in my program,
and then I could read() from the other end.  But it didn't work.
Perhaps the sh process doesn't inherit my file descriptors.  I suppose
I *could* do
	popen("csh | sendoutputback","w")
where sendoutputback would be a separate program that would feed
me its standard input using IPC.  But that's ugly and a pain.
Besides, none of this is giving me access to csh's stderr either.
(Alternatively, I wish I could just have my program pretend to be me
logged in on some tty; that would accomplish all of this in one step.)
Can anybody help me?  This shouldn't be that hard to do!!!
Thanks,
Mike Frank
    
    
More information about the Comp.unix.questions
mailing list