read and write from a pipe without locking up?
|
|
The stdio package has an optimization for speed that buffers characters so
that you can avoid un-necessary system calls. This isn`t very good for
interactive use so stdio changes it`s behaviour if the file is a terminal. When
you write to a pipe you are not writing to a terminal and so your output is
buffered, similarly when the program at the other end of the pipe writes its
response it is also buffered. The end result is the programs at both end of the
pipe stall waiting for input. It is possible to force the buffers to be written
using flush in Tcl and fflush() in C, often though, you don`t have control over
the program at the other end of the pipeline and in that case your only
solution is to use a pseudo-teletype (pty). Unfortunately this isn`t all that
easy.
While this isn`t directly supported in Tcl the spawn command in expect opens a
pty and starts a command.
|
|
|