Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / man / man3 / libexpect.3
CommitLineData
920dae64
AT
1.TH LIBEXPECT 3 "12 December 1991"
2.SH NAME
3libexpect \- programmed dialogue library with interactive programs
4.SH DESCRIPTION
5This library contains functions that allow Expect to be used as
6a Tcl extension or to be used directly from C or C++ (without Tcl).
7Adding Expect as a Tcl extension is very short and simple, so that will be
8covered first.
9.SH SYNOPSIS
10.nf
11
12.B #include "expect_tcl.h"
13.B Expect_Init(interp);
14
15.B cc files... \-lexpect5.20 \-ltcl7.5 \-lm
16
17.fi
18Note: library versions may differ in the actual release.
19
20The Expect_Init function adds expect commands to the named
21interpreter. It avoids overwriting commands that already exist,
22however aliases beginning with "exp_" are always created for expect
23commands. So for example, "send" can be used as "exp_send".
24
25Generally, you should only call Expect commands via Tcl_Eval.
26Certain auxiliary functions may be called directly. They are summarized
27below. They may be useful in constructing your own main. Look
28at the file exp_main_exp.c in the Expect distribution as
29a prototype main. Another prototype is tclAppInit.c in the
30Tcl source distribution. A prototype for working with Tk is in
31exp_main_tk.c in the Expect distribution.
32.nf
33
34int exp_cmdlinecmds;
35int exp_interactive;
36FILE *exp_cmdfile;
37char *exp_cmdfilename;
38int exp_tcl_debugger_available;
39
40void exp_parse_argv(Tcl_Interp *,int argc,char **argv);
41int exp_interpreter(Tcl_Interp *);
42void exp_interpret_cmdfile(Tcl_Interp *,FILE *);
43void exp_interpret_cmdfilename(Tcl_Interp *,char *);
44void exp_interpret_rcfiles(Tcl_Interp *,int my_rc,int sys_rc);
45char * exp_cook(char *s,int *len);
46void (*exp_app_exit)EXP_PROTO((Tcl_Interp *);
47void exp_exit(Tcl_Interp *,int status);
48void exp_exit_handlers(Tcl_Interp *);
49void exp_error(Tcl_Interp,char *,...);
50
51.fi
52.B exp_cmdlinecmds
53is 1 if Expect has been invoked with commands on the program command-line (using "-c" for example).
54.B exp_interactive
55is 1 if Expect has been invoked with the -i flag or if no commands or script is being invoked.
56.B exp_cmdfile
57is a stream from which Expect will read commands.
58.B exp_cmdfilename
59is the name of a file which Expect will open and read commands from.
60.B exp_tcl_debugger_available
61is 1 if the debugger has been armed.
62
63.B exp_parse_argv
64reads the representation of the command line.
65Based on what is found, any of the other variables listed here
66are initialized appropriately.
67.B exp_interpreter
68interactively prompts the user for commands and evaluates them.
69.B exp_interpret_cmdfile
70reads the given stream and evaluates any commands found.
71.B exp_interpret_cmdfilename
72opens the named file and evaluates any commands found.
73.B exp_interpret_rcfiles
74reads and evalutes the .rc files. If my_rc is zero,
75then ~/.expectrc is skipped. If sys_rc is zero, then the system-wide
76expectrc file is skipped.
77.B exp_cook
78returns a static buffer containing the argument reproduced with
79newlines replaced by carriage-return linefeed sequences.
80The primary purpose of this is to allow messages to be produced
81without worrying about whether the terminal is in raw mode or
82cooked mode.
83If length is zero, it is computed via strlen.
84.B exp_error is a printf-like function that writes the result
85to interp->result.
86.SH SYNOPSIS
87.nf
88.B #include <expect.h>
89
90.B int
91.B "exp_spawnl(file, arg0 [, arg1, ..., argn] (char *)0);"
92.B char *file;
93.B char *arg0, *arg1, ... *argn;
94
95.B int
96.B exp_spawnv(file,argv);
97.B char *file, *argv[ ];
98
99.B int
100.B exp_spawnfd(fd);
101.B int fd;
102
103.B FILE *
104.B exp_popen(command);
105.B char *command;
106
107.B extern int exp_pid;
108.B extern int exp_ttyinit;
109.B extern int exp_ttycopy;
110.B extern int exp_console;
111.B extern char *exp_stty_init;
112.B extern void (*exp_close_in_child)();
113.B extern void (*exp_child_exec_prelude)();
114.B extern void exp_close_tcl_files();
115
116.B cc files... \-lexpect \-ltcl \-lm
117.fi
118
119.SH DESCRIPTION
120.B exp_spawnl
121and
122.B exp_spawnv
123fork a new process so that its stdin,
124stdout, and stderr can be written and read by the current process.
125.I file
126is the name of a file to be executed. The
127.I arg
128pointers are
129null-terminated strings. Following the style of execve(),
130.I arg0
131(or
132.IR argv[0] )
133is customarily a duplicate of the name of the file.
134.PP
135Four interfaces are available,
136.B exp_spawnl
137is useful when the number of
138arguments is known at compile time.
139.B exp_spawnv
140is useful when the number of arguments is not known at compile time.
141.B exp_spawnfd
142is useful when an open file descriptor is already available as a source.
143.B exp_popen
144is explained later on.
145.PP
146If the process is successfully created, a file descriptor is returned
147which corresponds to the process's stdin, stdout and stderr.
148A stream may be associated with the file descriptor by using fdopen().
149(This should almost certainly be followed by setbuf() to unbuffer the I/O.)
150.PP
151Closing the file descriptor will typically be detected by the
152process as an EOF. Once such a process exits, it should be waited
153upon (via wait) in order to free up the kernel process slot. (Some systems
154allow you to avoid this if you ignore the SIGCHLD signal).
155.PP
156.B exp_popen
157is yet another interface, styled after popen(). It takes a Bourne
158shell command line, and returns a stream that corresponds to the process's
159stdin, stdout and stderr. The actual implementation of
160.B exp_popen
161below demonstrates
162.BR exp_spawnl .
163.nf
164
165FILE *
166exp_popen(program)
167char *program;
168{
169 FILE *fp;
170 int ec;
171
172 if (0 > (ec = exp_spawnl("sh","sh","-c",program,(char *)0)))
173 return(0);
174 if (NULL == (fp = fdopen(ec,"r+")) return(0);
175 setbuf(fp,(char *)0);
176 return(fp);
177}
178.fi
179
180After a process is started, the variable
181.B exp_pid
182is set to the process-id of the new process. The variable
183.B exp_pty_slave_name
184is set to the name of the slave side of the pty.
185
186The spawn functions uses a pty to communicate with the process. By
187default, the pty is initialized the same way as the user's tty (if
188possible, i.e., if the environment has a controlling terminal.) This
189initialization can be skipped by setting exp_ttycopy to 0.
190
191The pty is further initialized to some system wide defaults if
192exp_ttyinit is non-zero. The default is generally comparable to "stty sane".
193
194The tty setting can be further modified by setting the variable
195.BR exp_stty_init .
196This variable is interpreted in the style of stty arguments. For
197example, exp_stty_init = "sane"; repeats the default initialization.
198
199On some systems, it is possible to redirect console output to ptys.
200If this is supported, you can force the next spawn to obtain the
201console output by setting the variable
202.B exp_console
203to 1.
204
205Between the time a process is started and the new program is given
206control, the spawn functions can clean up the environment by closing
207file descriptors. By default, the only file descriptors closed are
208ones internal to Expect and any marked "close-on-exec".
209
210If needed, you can close additional file descriptors by creating
211an appropriate function and assigning it to exp_close_in_child.
212The function will be called after the fork and before the exec.
213(This also modifies the behavior of the spawn command in Expect.)
214
215If you are also using Tcl, it may be convenient to use the function
216exp_close_tcl_files which closes all files between the default
217standard file descriptors and the highest descriptor known to Tcl.
218(Expect does this.)
219
220The function exp_child_exec_prelude is the last function called prior
221to the actual exec in the child. You can redefine this for effects
222such as manipulating the uid or the signals.
223
224.SH "IF YOU WANT TO ALLOCATE YOUR OWN PTY"
225.nf
226
227.B extern int exp_autoallocpty;
228.B extern int exp_pty[2];
229.fi
230
231The spawn functions use a pty to communicate with the process. By
232default, a pty is automatically allocated each time a process is spawned.
233If you want to allocate ptys yourself, before calling one of the spawn
234functions, set
235.B exp_autoallocpty
236to 0,
237.B exp_pty[0]
238to the master pty file descriptor and
239.B exp_pty[1]
240to the slave pty file descriptor.
241The expect library will not do any pty initializations (e.g., exp_stty_init will not be used).
242The slave pty file descriptor will be
243automatically closed when the process is spawned. After the process is
244started, all further communication takes place with the master pty file
245descriptor.
246.PP
247.B exp_spawnl
248and
249.B exp_spawnv
250duplicate the shell's actions
251in searching for an executable file in a list of directories. The
252directory list is obtained from the environment.
253.SH EXPECT PROCESSING
254While it is possible to use read() to read information from a process
255spawned by
256.B exp_spawnl
257or
258.BR exp_spawnv ,
259more convenient functions are provided. They are as
260follows:
261.nf
262
263.B int
264.B exp_expectl(fd,type1,pattern1,[re1,],value1,type2,...,exp_end);
265.B int fd;
266.B enum exp_type type;
267.B char *pattern1, *pattern2, ...;
268.B regexp *re1, *re2, ...;
269.B int value1, value2, ...;
270.B
271
272.B int
273.B exp_fexpectl(fp,type1,pattern1,[re1,]value1,type2,...,exp_end);
274.B FILE *fp;
275.B enum exp_type type;
276.B char *pattern1, *pattern2, ...;
277.B regexp *re1, *re2, ...;
278.B int value1, value2, ...;
279
280.B enum exp_type {
281.B exp_end,
282.B exp_glob,
283.B exp_exact,
284.B exp_regexp,
285.B exp_compiled,
286.B exp_null,
287.B };
288
289.B struct exp_case {
290.B char *pattern;
291.B regexp *re;
292.B enum exp_type type;
293.B int value;
294.B };
295
296.B int
297.B exp_expectv(fd,cases);
298.B int fd;
299.B struct exp_case *cases;
300
301.B int
302.B exp_fexpectv(fp,cases);
303.B FILE *fp;
304.B struct exp_case *cases;
305
306.B extern int exp_timeout;
307.B extern char *exp_match;
308.B extern char *exp_match_end;
309.B extern char *exp_buffer;
310.B extern char *exp_buffer_end;
311.B extern int exp_match_max;
312.B extern int exp_full_buffer;
313.B extern int exp_remove_nulls;
314.fi
315
316The functions wait until the output from a process matches one of the
317patterns, a specified time period has passed, or an EOF is seen.
318.PP
319The first argument to each function is either a file descriptor or a stream.
320Successive sets of arguments describe patterns and associated integer values
321to return when the pattern matches.
322.PP
323The type argument is one of four values. exp_end indicates that no more
324patterns appear.
325exp_glob indicates that the pattern is a glob-style string pattern.
326exp_exact indicates that the pattern is an exact string.
327exp_regexp indicates that the pattern is a regexp-style string pattern.
328exp_compiled indicates that the pattern is a regexp-style string pattern,
329and that its compiled form is also provided.
330exp_null indicates that the pattern is a null (for debugging purposes,
331a string pattern must also follow).
332.PP
333If the compiled form is not provided with the functions
334.B exp_expectl
335and
336.BR exp_fexpectl ,
337any pattern compilation done internally is
338thrown away after the function returns. The functions
339.B exp_expectv
340and
341.B exp_fexpectv
342will automatically compile patterns and will not throw them away.
343Instead, they must be discarded by the user, by calling free on each
344pattern. It is only necessary to discard them, the last time the
345cases are used.
346.PP
347Regexp subpatterns matched are stored in the compiled regexp.
348Assuming "re" contains a compiled regexp, the matched string can be
349found in re->startp[0]. The match substrings (according to the parentheses)
350in the original pattern can be found in re->startp[1], re->startp[2], and
351so on, up to re->startp[9]. The corresponding strings ends are re->endp[x]
352where x is that same index as for the string start.
353
354The type exp_null matches if a null appears in the input. The
355variable exp_remove_nulls must be set to 0 to prevent nulls from
356being automatically stripped. By default, exp_remove_nulls is set
357to 1 and nulls are automatically stripped.
358
359.B exp_expectv
360and
361.B exp_fexpectv
362are useful when the number of patterns is
363not known in advance. In this case, the sets are provided in an array.
364The end of the array is denoted by a struct exp_case with type exp_end.
365For the rest
366of this discussion, these functions will be referred to generically as
367.IR expect.
368.PP
369If a pattern matches, then the corresponding integer value is returned.
370Values need not be unique, however they should be positive to avoid
371being mistaken for EXP_EOF, EXP_TIMEOUT, or EXP_FULLBUFFER.
372Upon EOF or timeout, the value
373.B EXP_EOF
374or
375.B EXP_TIMEOUT
376is returned. The
377default timeout period is 10 seconds but may be changed by setting the
378variable
379.BR exp_timeout .
380A value of -1
381disables a timeout from occurring.
382A value of 0 causes the expect function to return immediately (i.e., poll)
383after one read().
384However it must be preceded by a function such as select, poll, or
385an event manager callback to guarantee that there is data to be read.
386
387If the variable exp_full_buffer is 1, then EXP_FULLBUFFER is returned
388if exp_buffer fills with no pattern having matched.
389
390When the expect function returns,
391.B exp_buffer
392points to the buffer
393of characters that was being considered for matching.
394.B exp_buffer_end
395points to one past the last character in exp_buffer.
396If a match occurred,
397.B exp_match
398points into
399.B exp_buffer
400where the match began.
401.B exp_match_end
402points to one character past where the match ended.
403.PP
404Each time new input arrives, it is compared to each pattern in the
405order they are listed. Thus, you may test for absence of a match by
406making the last pattern something guaranteed to appear, such as a
407prompt. In situations where there is no prompt, you must check for
408.B EXP_TIMEOUT
409(just like you would if you were interacting manually). More philosophy
410and strategies on specifying
411.B expect
412patterns can be found in the
413documentation on the
414.B expect
415program itself. See SEE ALSO below.
416.PP
417Patterns are the usual C-shell-style regular expressions. For
418example, the following fragment looks for a successful login, such
419as from a telnet dialogue.
420.nf
421
422 switch (exp_expectl(
423 exp_glob,"connected",CONN,
424 exp_glob,"busy",BUSY,
425 exp_glob,"failed",ABORT,
426 exp_glob,"invalid password",ABORT,
427 exp_end)) {
428 case CONN: /* logged in successfully */
429 break;
430 case BUSY: /* couldn't log in at the moment */
431 break;
432 case EXP_TIMEOUT:
433 case ABORT: /* can't log in at any moment! */
434 break;
435 default: /* problem with expect */
436 }
437.fi
438
439Asterisks (as in the
440example above) are a useful shorthand for omitting line-termination
441characters and other detail.
442Patterns must match the entire output of the current process (since
443the previous read on the descriptor or stream).
444More than 2000 bytes of output can
445force earlier bytes to be "forgotten". This may be changed by setting
446the variable
447.BR exp_match_max .
448Note that excessively large values can slow down the pattern matcher.
449.SH RUNNING IN THE BACKGROUND
450.nf
451
452.B extern int exp_disconnected;
453.B int exp_disconnect();
454
455.fi
456It is possible to move a process into the background after it has
457begun running. A typical use for this is to read passwords and then
458go into the background to sleep before using the passwords to do real
459work.
460.PP
461To move a process into the background, fork, call exp_disconnect() in the
462child process and exit() in the parent process. This disassociates
463your process from the controlling terminal. If you wish to move a
464process into the background in a different way, you must set the
465variable exp_disconnected to 1. This allows processes spawned after
466this point to be started correctly.
467.SH MULTIPLEXING
468By default, the expect functions block inside of a read on a single file
469descriptor. If you want to wait on patterns from multiple file
470descriptors,
471use select, poll, or an event manager.
472They will tell you what file descriptor is ready to read.
473
474When a file descriptor is ready to read, you can use the expect
475functions to do one and only read by setting timeout to 0.
476.SH SLAVE CONTROL
477
478.nf
479
480.B void
481.B exp_slave_control(fd,enable)
482.B int fd;
483.B int enable;
484
485.fi
486
487Pty trapping is normally done automatically by the expect functions.
488However, if you want to issue an ioctl, for example, directly on the
489slave device, you should temporary disable trapping.
490
491Pty trapping can be controlled with exp_slave_control. The first
492argument is the file descriptor corresponding to the spawned process.
493The second argument is a 0 if trapping is to be disabled and 1 if it
494is to be enabled.
495
496.SH ERRORS
497All functions indicate errors by returning \-1 and setting errno.
498.PP
499Errors that occur after the spawn functions fork (e.g., attempting to
500spawn a non-existent program) are written to the process's stderr,
501and will be read by the first
502.BR expect .
503.SH SIGNALS
504.nf
505.B extern int exp_reading;
506.B extern jmp_buf exp_readenv;
507.fi
508
509.B expect
510uses alarm() to timeout, thus if you generate alarms during
511.BR expect ,
512it will timeout prematurely.
513.PP
514Internally,
515.B expect
516calls read() which can be interrupted by signals. If
517you define signal handlers, you can choose to restart or abort
518.BR expect 's
519internal read. The variable,
520.BR exp_reading ,
521is true if (and only if)
522.BR expect 's
523read has been interrupted. longjmp(exp_readenv,EXP_ABORT) will abort
524the read. longjmp(exp_readenv,EXP_RESTART) will restart the read.
525.SH LOGGING
526.nf
527
528.B extern int exp_loguser;
529.B extern int exp_logfile_all
530.B extern FILE *exp_logfile;
531.fi
532
533If
534.B exp_loguser
535is nonzero,
536.B expect
537sends any output from the spawned process to
538stdout. Since interactive programs typically echo their input, this
539usually suffices to show both sides of the conversation. If
540.B exp_logfile
541is also nonzero, this same output is written to the stream defined by
542.BR exp_logfile .
543If
544.B exp_logfile_all
545is non-zero,
546.B exp_logfile
547is written regardless of the value of
548.BR exp_loguser .
549
550.SH DEBUGGING
551While I consider the library to be easy to use, I think that the
552standalone expect program is much, much, easier to use than working
553with the C compiler and its usual edit, compile, debug cycle. Unlike
554typical C programs, most of the debugging isn't getting the C compiler
555to accept your programs - rather, it is getting the dialogue correct.
556Also, translating scripts from expect to C is usually not necessary.
557For example, the speed of interactive dialogues is virtually never an
558issue. So please try the standalone 'expect' program first. I
559suspect it is a more appropriate solution for most people than the
560library.
561.PP
562Nonetheless, if you feel compelled to debug in C,
563here are some tools to help you.
564.nf
565
566.B extern int exp_is_debugging;
567.B extern FILE *exp_debugfile;
568.fi
569
570While expect dialogues seem very intuitive, trying to codify them in a
571program can reveal many surprises in a program's interface. Therefore
572a variety of debugging aids are available. They are controlled by the
573above variables, all 0 by default.
574
575Debugging information internal to
576.B expect
577is sent to stderr when
578.B exp_is_debugging
579is non-zero. The debugging information includes
580every character received, and every attempt made to match the current
581input against the patterns. In addition, non-printable characters are
582translated to a printable form. For example, a control-C appears as a
583caret followed by a C. If
584.B exp_logfile
585is non-zero, this information
586is also written to that stream.
587.PP
588If
589.B exp_debugfile
590is non-zero, all normal and debugging information is
591written to that stream, regardless of the value of
592.BR exp_is_debugging .
593.SH CAVEATS
594The stream versions of the
595.B expect
596functions are much slower than the
597file descriptor versions because there is no way to portably read
598an unknown number of bytes without the potential of timing out.
599Thus, characters are read one at a time. You are therefore strongly
600encouraged to use the file descriptor versions of
601.B expect
602(although,
603automated versions of interactive programs don't usually demand high speed
604anyway).
605.PP
606You can actually get the best of both worlds, writing with the usual
607stream functions and reading with the file descriptor versions of
608.B expect
609as long as you don't attempt to intermix other stream input
610functions (e.g., fgetc).
611To do this, pass fileno(stream) as the file descriptor each time.
612Fortunately, there is little reason to use anything but the
613.B expect
614functions when reading from interactive programs.
615.PP
616There is no matching exp_pclose to exp_popen (unlike popen and pclose).
617It only takes two functions to close down a connection (fclose() followed
618by waiting on the pid), but it is not uncommon to separate these two
619actions by large time intervals, so the function seems of little value.
620.PP
621If you are running on a Cray running Unicos (all I know for sure from
622experience), you must run your compiled program as root or setuid. The
623problem is that the Cray only allows root processes to open ptys.
624You should observe as much precautions as possible: If you don't need
625permissions, setuid(0) only immediately before calling one of the spawn
626functions and immediately set it back afterwards.
627.PP
628Normally,
629.B spawn
630takes little time to execute. If you notice spawn taking a
631significant amount of time, it is probably encountering ptys that are
632wedged. A number of tests are run on ptys to avoid entanglements with
633errant processes. (These take 10 seconds per wedged pty.) Running
634expect with the \-d option will show if
635.B expect
636is encountering many ptys in odd states. If you cannot kill
637the processes to which these ptys are attached, your only recourse may
638be to reboot.
639.SH BUGS
640The
641.B exp_fexpect
642functions don't work at all under HP-UX - it appears to be a bug in getc.
643Follow the
644advice (above) about using the
645.B exp_expect
646functions (which doesn't need to call getc). If you fix the problem (before
647I do - please check the latest release) let me know.
648.SH SEE ALSO
649An alternative to this library is the
650.B expect
651program.
652.B expect
653interprets scripts written in a high-level language
654which direct the dialogue.
655In addition, the user can take control and interact directly when desired.
656If it is not absolutely necessary to write your own C program, it is much
657easier to use
658.B expect
659to perform the entire interaction.
660It is described further in the following references:
661.PP
662.I
663"expect: Curing Those Uncontrollable Fits of Interactivity" \fRby Don Libes,
664Proceedings of the Summer 1990 USENIX Conference,
665Anaheim, California, June 11-15, 1990.
666.PP
667.I
668"Using expect to Automate System Administration Tasks" \fRby Don Libes,
669Proceedings of the 1990 USENIX Large Installation Systems Administration
670Conference, Colorado Springs, Colorado, October 17-19, 1990.
671.PP
672expect(1), alarm(3), read(2), write(2), fdopen(3), execve(2), execvp(3),
673longjmp(3), pty(4).
674.PP
675There are several examples C programs in the test directory of
676.BR expect 's
677source distribution which use the expect library.
678.PP
679.SH AUTHOR
680Don Libes, libes@nist.gov, National Institute of Standards and Technology
681.SH ACKNOWLEDGEMENTS
682Thanks to John Ousterhout (UCBerkeley) for supplying the pattern
683matcher.
684.PP
685Design and implementation of the
686.B expect
687library was paid for by the U.S. government and is therefore in the public
688domain.
689However the author and NIST would like credit
690if this program and documentation or portions of them are used.