библиотека программных диалогов с интерактивными программами (programmed dialogue library with interactive programs)
Предостережение (Caveat)
The stream versions of the expect
functions are much slower than
the file descriptor versions because there is no way to portably
read an unknown number of bytes without the potential of timing
out. Thus, characters are read one at a time. You are therefore
strongly encouraged to use the file descriptor versions of expect
(although, automated versions of interactive programs don't
usually demand high speed anyway).
You can actually get the best of both worlds, writing with the
usual stream functions and reading with the file descriptor
versions of expect
as long as you don't attempt to intermix other
stream input functions (e.g., fgetc). To do this, pass
fileno(stream) as the file descriptor each time. Fortunately,
there is little reason to use anything but the expect
functions
when reading from interactive programs.
There is no matching exp_pclose to exp_popen (unlike popen and
pclose). It only takes two functions to close down a connection
(fclose() followed by waiting on the pid), but it is not uncommon
to separate these two actions by large time intervals, so the
function seems of little value.
If you are running on a Cray running Unicos (all I know for sure
from experience), you must run your compiled program as root or
setuid. The problem is that the Cray only allows root processes
to open ptys. You should observe as much precautions as
possible: If you don't need permissions, setuid(0) only
immediately before calling one of the spawn functions and
immediately set it back afterwards.
Normally, spawn
takes little time to execute. If you notice
spawn taking a significant amount of time, it is probably
encountering ptys that are wedged. A number of tests are run on
ptys to avoid entanglements with errant processes. (These take
10 seconds per wedged pty.) Running expect with the -d option
will show if expect
is encountering many ptys in odd states. If
you cannot kill the processes to which these ptys are attached,
your only recourse may be to reboot.