Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!cs.utexas.edu!mailrus!ames!eos!shelby!portia!bugboy From: bugboy@portia.Stanford.EDU (Michael Frank) Newsgroups: comp.unix.questions Subject: Need a 2-way alternative to popen() Message-ID: <9539@portia.Stanford.EDU> Date: 25 Feb 90 11:32:51 GMT Sender: Michael Frank Reply-To: bugboy@portia.Stanford.EDU (Michael Frank) Distribution: usa Organization: Stanford University Lines: 41 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