(Variable Definitions): Document custom-reevaluate-setting.
[bpt/emacs.git] / doc / lispref / processes.texi
CommitLineData
b8d4c8d0
GM
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
57ebf0be 4@c 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
b8d4c8d0 5@c See the file elisp.texi for copying conditions.
6336d8c3 6@setfilename ../../info/processes
b8d4c8d0
GM
7@node Processes, Display, Abbrevs, Top
8@chapter Processes
9@cindex child process
10@cindex parent process
11@cindex subprocess
12@cindex process
13
14 In the terminology of operating systems, a @dfn{process} is a space in
15which a program can execute. Emacs runs in a process. Emacs Lisp
16programs can invoke other programs in processes of their own. These are
17called @dfn{subprocesses} or @dfn{child processes} of the Emacs process,
18which is their @dfn{parent process}.
19
20 A subprocess of Emacs may be @dfn{synchronous} or @dfn{asynchronous},
21depending on how it is created. When you create a synchronous
22subprocess, the Lisp program waits for the subprocess to terminate
23before continuing execution. When you create an asynchronous
24subprocess, it can run in parallel with the Lisp program. This kind of
25subprocess is represented within Emacs by a Lisp object which is also
26called a ``process.'' Lisp programs can use this object to communicate
27with the subprocess or to control it. For example, you can send
28signals, obtain status information, receive output from the process, or
29send input to it.
30
31@defun processp object
23dd4ecd
EZ
32This function returns @code{t} if @var{object} represents an Emacs
33subprocess, @code{nil} otherwise.
b8d4c8d0
GM
34@end defun
35
23dd4ecd
EZ
36 In addition to subprocesses of the current Emacs session, you can
37also access other processes running on your machine. @xref{System
38Processes}.
39
b8d4c8d0
GM
40@menu
41* Subprocess Creation:: Functions that start subprocesses.
42* Shell Arguments:: Quoting an argument to pass it to a shell.
43* Synchronous Processes:: Details of using synchronous subprocesses.
44* Asynchronous Processes:: Starting up an asynchronous subprocess.
45* Deleting Processes:: Eliminating an asynchronous subprocess.
46* Process Information:: Accessing run-status and other attributes.
47* Input to Processes:: Sending input to an asynchronous subprocess.
48* Signals to Processes:: Stopping, continuing or interrupting
49 an asynchronous subprocess.
50* Output from Processes:: Collecting output from an asynchronous subprocess.
51* Sentinels:: Sentinels run when process run-status changes.
52* Query Before Exit:: Whether to query if exiting will kill a process.
23dd4ecd 53* System Processes:: Accessing other processes running on your system.
b8d4c8d0
GM
54* Transaction Queues:: Transaction-based communication with subprocesses.
55* Network:: Opening network connections.
56* Network Servers:: Network servers let Emacs accept net connections.
57* Datagrams:: UDP network connections.
58* Low-Level Network:: Lower-level but more general function
59 to create connections and servers.
60* Misc Network:: Additional relevant functions for network connections.
c73e02fa 61* Serial Ports:: Communicating with serial ports.
b8d4c8d0
GM
62* Byte Packing:: Using bindat to pack and unpack binary data.
63@end menu
64
65@node Subprocess Creation
66@section Functions that Create Subprocesses
67
68 There are three functions that create a new subprocess in which to run
69a program. One of them, @code{start-process}, creates an asynchronous
70process and returns a process object (@pxref{Asynchronous Processes}).
71The other two, @code{call-process} and @code{call-process-region},
72create a synchronous process and do not return a process object
73(@pxref{Synchronous Processes}).
74
75 Synchronous and asynchronous processes are explained in the following
76sections. Since the three functions are all called in a similar
77fashion, their common arguments are described here.
78
79@cindex execute program
80@cindex @code{PATH} environment variable
81@cindex @code{HOME} environment variable
82 In all cases, the function's @var{program} argument specifies the
83program to be run. An error is signaled if the file is not found or
84cannot be executed. If the file name is relative, the variable
85@code{exec-path} contains a list of directories to search. Emacs
86initializes @code{exec-path} when it starts up, based on the value of
87the environment variable @code{PATH}. The standard file name
88constructs, @samp{~}, @samp{.}, and @samp{..}, are interpreted as
89usual in @code{exec-path}, but environment variable substitutions
90(@samp{$HOME}, etc.) are not recognized; use
91@code{substitute-in-file-name} to perform them (@pxref{File Name
92Expansion}). @code{nil} in this list refers to
93@code{default-directory}.
94
95 Executing a program can also try adding suffixes to the specified
96name:
97
98@defvar exec-suffixes
99This variable is a list of suffixes (strings) to try adding to the
100specified program file name. The list should include @code{""} if you
101want the name to be tried exactly as specified. The default value is
102system-dependent.
103@end defvar
104
105 @strong{Please note:} The argument @var{program} contains only the
106name of the program; it may not contain any command-line arguments. You
107must use @var{args} to provide those.
108
109 Each of the subprocess-creating functions has a @var{buffer-or-name}
110argument which specifies where the standard output from the program will
111go. It should be a buffer or a buffer name; if it is a buffer name,
112that will create the buffer if it does not already exist. It can also
113be @code{nil}, which says to discard the output unless a filter function
114handles it. (@xref{Filter Functions}, and @ref{Read and Print}.)
115Normally, you should avoid having multiple processes send output to the
116same buffer because their output would be intermixed randomly.
117
118@cindex program arguments
119 All three of the subprocess-creating functions have a @code{&rest}
120argument, @var{args}. The @var{args} must all be strings, and they are
121supplied to @var{program} as separate command line arguments. Wildcard
122characters and other shell constructs have no special meanings in these
123strings, since the strings are passed directly to the specified program.
124
125 The subprocess gets its current directory from the value of
126@code{default-directory} (@pxref{File Name Expansion}).
127
128@cindex environment variables, subprocesses
129 The subprocess inherits its environment from Emacs, but you can
130specify overrides for it with @code{process-environment}. @xref{System
131Environment}.
132
133@defvar exec-directory
134@pindex movemail
135The value of this variable is a string, the name of a directory that
136contains programs that come with GNU Emacs, programs intended for Emacs
137to invoke. The program @code{movemail} is an example of such a program;
138Rmail uses it to fetch new mail from an inbox.
139@end defvar
140
141@defopt exec-path
142The value of this variable is a list of directories to search for
143programs to run in subprocesses. Each element is either the name of a
144directory (i.e., a string), or @code{nil}, which stands for the default
145directory (which is the value of @code{default-directory}).
146@cindex program directories
147
148The value of @code{exec-path} is used by @code{call-process} and
149@code{start-process} when the @var{program} argument is not an absolute
150file name.
151@end defopt
152
153@node Shell Arguments
154@section Shell Arguments
155@cindex arguments for shell commands
156@cindex shell command arguments
157
158 Lisp programs sometimes need to run a shell and give it a command
159that contains file names that were specified by the user. These
160programs ought to be able to support any valid file name. But the shell
161gives special treatment to certain characters, and if these characters
162occur in the file name, they will confuse the shell. To handle these
163characters, use the function @code{shell-quote-argument}:
164
165@defun shell-quote-argument argument
166This function returns a string which represents, in shell syntax,
167an argument whose actual contents are @var{argument}. It should
168work reliably to concatenate the return value into a shell command
169and then pass it to a shell for execution.
170
171Precisely what this function does depends on your operating system. The
172function is designed to work with the syntax of your system's standard
173shell; if you use an unusual shell, you will need to redefine this
174function.
175
176@example
177;; @r{This example shows the behavior on GNU and Unix systems.}
178(shell-quote-argument "foo > bar")
179 @result{} "foo\\ \\>\\ bar"
180
181;; @r{This example shows the behavior on MS-DOS and MS-Windows.}
182(shell-quote-argument "foo > bar")
183 @result{} "\"foo > bar\""
184@end example
185
186Here's an example of using @code{shell-quote-argument} to construct
187a shell command:
188
189@example
190(concat "diff -c "
191 (shell-quote-argument oldfile)
192 " "
193 (shell-quote-argument newfile))
194@end example
195@end defun
196
197@node Synchronous Processes
198@section Creating a Synchronous Process
199@cindex synchronous subprocess
200
201 After a @dfn{synchronous process} is created, Emacs waits for the
202process to terminate before continuing. Starting Dired on GNU or
203Unix@footnote{On other systems, Emacs uses a Lisp emulation of
204@code{ls}; see @ref{Contents of Directories}.} is an example of this: it
205runs @code{ls} in a synchronous process, then modifies the output
206slightly. Because the process is synchronous, the entire directory
207listing arrives in the buffer before Emacs tries to do anything with it.
208
209 While Emacs waits for the synchronous subprocess to terminate, the
210user can quit by typing @kbd{C-g}. The first @kbd{C-g} tries to kill
211the subprocess with a @code{SIGINT} signal; but it waits until the
212subprocess actually terminates before quitting. If during that time the
213user types another @kbd{C-g}, that kills the subprocess instantly with
214@code{SIGKILL} and quits immediately (except on MS-DOS, where killing
215other processes doesn't work). @xref{Quitting}.
216
217 The synchronous subprocess functions return an indication of how the
218process terminated.
219
220 The output from a synchronous subprocess is generally decoded using a
221coding system, much like text read from a file. The input sent to a
222subprocess by @code{call-process-region} is encoded using a coding
223system, much like text written into a file. @xref{Coding Systems}.
224
225@defun call-process program &optional infile destination display &rest args
226This function calls @var{program} in a separate process and waits for
227it to finish.
228
229The standard input for the process comes from file @var{infile} if
230@var{infile} is not @code{nil}, and from the null device otherwise.
231The argument @var{destination} says where to put the process output.
232Here are the possibilities:
233
234@table @asis
235@item a buffer
236Insert the output in that buffer, before point. This includes both the
237standard output stream and the standard error stream of the process.
238
239@item a string
240Insert the output in a buffer with that name, before point.
241
242@item @code{t}
243Insert the output in the current buffer, before point.
244
245@item @code{nil}
246Discard the output.
247
248@item 0
249Discard the output, and return @code{nil} immediately without waiting
250for the subprocess to finish.
251
252In this case, the process is not truly synchronous, since it can run in
253parallel with Emacs; but you can think of it as synchronous in that
254Emacs is essentially finished with the subprocess as soon as this
255function returns.
256
257MS-DOS doesn't support asynchronous subprocesses, so this option doesn't
258work there.
259
260@item @code{(@var{real-destination} @var{error-destination})}
261Keep the standard output stream separate from the standard error stream;
262deal with the ordinary output as specified by @var{real-destination},
263and dispose of the error output according to @var{error-destination}.
264If @var{error-destination} is @code{nil}, that means to discard the
265error output, @code{t} means mix it with the ordinary output, and a
266string specifies a file name to redirect error output into.
267
268You can't directly specify a buffer to put the error output in; that is
269too difficult to implement. But you can achieve this result by sending
270the error output to a temporary file and then inserting the file into a
271buffer.
272@end table
273
274If @var{display} is non-@code{nil}, then @code{call-process} redisplays
275the buffer as output is inserted. (However, if the coding system chosen
276for decoding output is @code{undecided}, meaning deduce the encoding
277from the actual data, then redisplay sometimes cannot continue once
278non-@acronym{ASCII} characters are encountered. There are fundamental
279reasons why it is hard to fix this; see @ref{Output from Processes}.)
280
281Otherwise the function @code{call-process} does no redisplay, and the
282results become visible on the screen only when Emacs redisplays that
283buffer in the normal course of events.
284
285The remaining arguments, @var{args}, are strings that specify command
286line arguments for the program.
287
288The value returned by @code{call-process} (unless you told it not to
289wait) indicates the reason for process termination. A number gives the
290exit status of the subprocess; 0 means success, and any other value
291means failure. If the process terminated with a signal,
292@code{call-process} returns a string describing the signal.
293
294In the examples below, the buffer @samp{foo} is current.
295
296@smallexample
297@group
298(call-process "pwd" nil t)
299 @result{} 0
300
301---------- Buffer: foo ----------
302/usr/user/lewis/manual
303---------- Buffer: foo ----------
304@end group
305
306@group
307(call-process "grep" nil "bar" nil "lewis" "/etc/passwd")
308 @result{} 0
309
310---------- Buffer: bar ----------
311lewis:5LTsHm66CSWKg:398:21:Bil Lewis:/user/lewis:/bin/csh
312
313---------- Buffer: bar ----------
314@end group
315@end smallexample
316
317Here is a good example of the use of @code{call-process}, which used to
318be found in the definition of @code{insert-directory}:
319
320@smallexample
321@group
322(call-process insert-directory-program nil t nil @var{switches}
323 (if full-directory-p
324 (concat (file-name-as-directory file) ".")
325 file))
326@end group
327@end smallexample
328@end defun
329
330@defun process-file program &optional infile buffer display &rest args
331This function processes files synchronously in a separate process. It
332is similar to @code{call-process} but may invoke a file handler based
333on the value of the variable @code{default-directory}. The current
334working directory of the subprocess is @code{default-directory}.
335
336The arguments are handled in almost the same way as for
337@code{call-process}, with the following differences:
338
339Some file handlers may not support all combinations and forms of the
340arguments @var{infile}, @var{buffer}, and @var{display}. For example,
341some file handlers might behave as if @var{display} were @code{nil},
342regardless of the value actually passed. As another example, some
343file handlers might not support separating standard output and error
344output by way of the @var{buffer} argument.
345
346If a file handler is invoked, it determines the program to run based
347on the first argument @var{program}. For instance, consider that a
348handler for remote files is invoked. Then the path that is used for
349searching the program might be different than @code{exec-path}.
350
351The second argument @var{infile} may invoke a file handler. The file
352handler could be different from the handler chosen for the
353@code{process-file} function itself. (For example,
354@code{default-directory} could be on a remote host, whereas
355@var{infile} is on another remote host. Or @code{default-directory}
356could be non-special, whereas @var{infile} is on a remote host.)
357
358If @var{buffer} is a list of the form @code{(@var{real-destination}
359@var{error-destination})}, and @var{error-destination} names a file,
360then the same remarks as for @var{infile} apply.
361
362The remaining arguments (@var{args}) will be passed to the process
363verbatim. Emacs is not involved in processing file names that are
364present in @var{args}. To avoid confusion, it may be best to avoid
365absolute file names in @var{args}, but rather to specify all file
366names as relative to @code{default-directory}. The function
367@code{file-relative-name} is useful for constructing such relative
368file names.
369@end defun
370
371@defun call-process-region start end program &optional delete destination display &rest args
372This function sends the text from @var{start} to @var{end} as
373standard input to a process running @var{program}. It deletes the text
374sent if @var{delete} is non-@code{nil}; this is useful when
375@var{destination} is @code{t}, to insert the output in the current
376buffer in place of the input.
377
378The arguments @var{destination} and @var{display} control what to do
379with the output from the subprocess, and whether to update the display
380as it comes in. For details, see the description of
381@code{call-process}, above. If @var{destination} is the integer 0,
382@code{call-process-region} discards the output and returns @code{nil}
383immediately, without waiting for the subprocess to finish (this only
384works if asynchronous subprocesses are supported).
385
386The remaining arguments, @var{args}, are strings that specify command
387line arguments for the program.
388
389The return value of @code{call-process-region} is just like that of
390@code{call-process}: @code{nil} if you told it to return without
391waiting; otherwise, a number or string which indicates how the
392subprocess terminated.
393
394In the following example, we use @code{call-process-region} to run the
395@code{cat} utility, with standard input being the first five characters
396in buffer @samp{foo} (the word @samp{input}). @code{cat} copies its
397standard input into its standard output. Since the argument
398@var{destination} is @code{t}, this output is inserted in the current
399buffer.
400
401@smallexample
402@group
403---------- Buffer: foo ----------
404input@point{}
405---------- Buffer: foo ----------
406@end group
407
408@group
409(call-process-region 1 6 "cat" nil t)
410 @result{} 0
411
412---------- Buffer: foo ----------
413inputinput@point{}
414---------- Buffer: foo ----------
415@end group
416@end smallexample
417
418 The @code{shell-command-on-region} command uses
419@code{call-process-region} like this:
420
421@smallexample
422@group
423(call-process-region
424 start end
425 shell-file-name ; @r{Name of program.}
426 nil ; @r{Do not delete region.}
427 buffer ; @r{Send output to @code{buffer}.}
428 nil ; @r{No redisplay during output.}
429 "-c" command) ; @r{Arguments for the shell.}
430@end group
431@end smallexample
432@end defun
433
434@defun call-process-shell-command command &optional infile destination display &rest args
435This function executes the shell command @var{command} synchronously
436in a separate process. The final arguments @var{args} are additional
437arguments to add at the end of @var{command}. The other arguments
438are handled as in @code{call-process}.
439@end defun
440
441@defun process-file-shell-command command &optional infile destination display &rest args
442This function is like @code{call-process-shell-command}, but uses
443@code{process-file} internally. Depending on @code{default-directory},
444@var{command} can be executed also on remote hosts.
445@end defun
446
447@defun shell-command-to-string command
448This function executes @var{command} (a string) as a shell command,
449then returns the command's output as a string.
450@end defun
451
452@node Asynchronous Processes
453@section Creating an Asynchronous Process
454@cindex asynchronous subprocess
455
456 After an @dfn{asynchronous process} is created, Emacs and the subprocess
457both continue running immediately. The process thereafter runs
458in parallel with Emacs, and the two can communicate with each other
459using the functions described in the following sections. However,
460communication is only partially asynchronous: Emacs sends data to the
461process only when certain functions are called, and Emacs accepts data
462from the process only when Emacs is waiting for input or for a time
463delay.
464
465 Here we describe how to create an asynchronous process.
466
467@defun start-process name buffer-or-name program &rest args
468This function creates a new asynchronous subprocess and starts the
469program @var{program} running in it. It returns a process object that
470stands for the new subprocess in Lisp. The argument @var{name}
471specifies the name for the process object; if a process with this name
472already exists, then @var{name} is modified (by appending @samp{<1>},
473etc.) to be unique. The buffer @var{buffer-or-name} is the buffer to
474associate with the process.
475
476The remaining arguments, @var{args}, are strings that specify command
477line arguments for the program.
478
479In the example below, the first process is started and runs (rather,
480sleeps) for 100 seconds. Meanwhile, the second process is started, and
481given the name @samp{my-process<1>} for the sake of uniqueness. It
482inserts the directory listing at the end of the buffer @samp{foo},
483before the first process finishes. Then it finishes, and a message to
484that effect is inserted in the buffer. Much later, the first process
485finishes, and another message is inserted in the buffer for it.
486
487@smallexample
488@group
489(start-process "my-process" "foo" "sleep" "100")
490 @result{} #<process my-process>
491@end group
492
493@group
494(start-process "my-process" "foo" "ls" "-l" "/user/lewis/bin")
495 @result{} #<process my-process<1>>
496
497---------- Buffer: foo ----------
498total 2
499lrwxrwxrwx 1 lewis 14 Jul 22 10:12 gnuemacs --> /emacs
500-rwxrwxrwx 1 lewis 19 Jul 30 21:02 lemon
501
502Process my-process<1> finished
503
504Process my-process finished
505---------- Buffer: foo ----------
506@end group
507@end smallexample
508@end defun
509
510@defun start-file-process name buffer-or-name program &rest args
511Like @code{start-process}, this function starts a new asynchronous
512subprocess running @var{program} in it, and returns its process
513object---when @code{default-directory} is not a magic file name.
514
515If @code{default-directory} is magic, the function invokes its file
516handler instead. This handler ought to run @var{program}, perhaps on
517the local host, perhaps on a remote host that corresponds to
518@code{default-directory}. In the latter case, the local part of
519@code{default-directory} becomes the working directory of the process.
520
521This function does not try to invoke file name handlers for
522@var{program} or for the @var{program-args}.
523
524Depending on the implementation of the file handler, it might not be
525possible to apply @code{process-filter} or @code{process-sentinel} to
526the resulting process object (@pxref{Filter Functions}, @pxref{Sentinels}).
527
528Some file handlers may not support @code{start-file-process} (for
529example @code{ange-ftp-hook-function}). In such cases, the function
530does nothing and returns @code{nil}.
531@end defun
532
533@defun start-process-shell-command name buffer-or-name command &rest command-args
534This function is like @code{start-process} except that it uses a shell
535to execute the specified command. The argument @var{command} is a shell
536command name, and @var{command-args} are the arguments for the shell
537command. The variable @code{shell-file-name} specifies which shell to
538use.
539
540The point of running a program through the shell, rather than directly
541with @code{start-process}, is so that you can employ shell features such
542as wildcards in the arguments. It follows that if you include an
543arbitrary user-specified arguments in the command, you should quote it
544with @code{shell-quote-argument} first, so that any special shell
545characters do @emph{not} have their special shell meanings. @xref{Shell
546Arguments}.
547@end defun
548
549@defun start-file-process-shell-command name buffer-or-name command &rest command-args
550This function is like @code{start-process-shell-command}, but uses
551@code{start-file-process} internally. By this, @var{command} can be
552executed also on remote hosts, depending on @code{default-directory}.
553@end defun
554
555@defvar process-connection-type
556@cindex pipes
557@cindex @acronym{PTY}s
558This variable controls the type of device used to communicate with
559asynchronous subprocesses. If it is non-@code{nil}, then @acronym{PTY}s are
560used, when available. Otherwise, pipes are used.
561
562@acronym{PTY}s are usually preferable for processes visible to the user, as
563in Shell mode, because they allow job control (@kbd{C-c}, @kbd{C-z},
564etc.) to work between the process and its children, whereas pipes do
565not. For subprocesses used for internal purposes by programs, it is
566often better to use a pipe, because they are more efficient. In
567addition, the total number of @acronym{PTY}s is limited on many systems and
568it is good not to waste them.
569
570The value of @code{process-connection-type} takes effect when
571@code{start-process} is called. So you can specify how to communicate
572with one subprocess by binding the variable around the call to
573@code{start-process}.
574
575@smallexample
576@group
577(let ((process-connection-type nil)) ; @r{Use a pipe.}
578 (start-process @dots{}))
579@end group
580@end smallexample
581
582To determine whether a given subprocess actually got a pipe or a
583@acronym{PTY}, use the function @code{process-tty-name} (@pxref{Process
584Information}).
585@end defvar
586
587@node Deleting Processes
588@section Deleting Processes
589@cindex deleting processes
590
591 @dfn{Deleting a process} disconnects Emacs immediately from the
592subprocess. Processes are deleted automatically after they terminate,
593but not necessarily right away. You can delete a process explicitly
594at any time. If you delete a terminated process explicitly before it
595is deleted automatically, no harm results. Deleting a running
596process sends a signal to terminate it (and its child processes if
597any), and calls the process sentinel if it has one. @xref{Sentinels}.
598
599 When a process is deleted, the process object itself continues to
600exist as long as other Lisp objects point to it. All the Lisp
601primitives that work on process objects accept deleted processes, but
602those that do I/O or send signals will report an error. The process
603mark continues to point to the same place as before, usually into a
604buffer where output from the process was being inserted.
605
606@defopt delete-exited-processes
607This variable controls automatic deletion of processes that have
608terminated (due to calling @code{exit} or to a signal). If it is
609@code{nil}, then they continue to exist until the user runs
610@code{list-processes}. Otherwise, they are deleted immediately after
611they exit.
612@end defopt
613
614@defun delete-process process
615This function deletes a process, killing it with a @code{SIGKILL}
616signal. The argument may be a process, the name of a process, a
617buffer, or the name of a buffer. (A buffer or buffer-name stands for
618the process that @code{get-buffer-process} returns.) Calling
619@code{delete-process} on a running process terminates it, updates the
620process status, and runs the sentinel (if any) immediately. If the
621process has already terminated, calling @code{delete-process} has no
622effect on its status, or on the running of its sentinel (which will
623happen sooner or later).
624
625@smallexample
626@group
627(delete-process "*shell*")
628 @result{} nil
629@end group
630@end smallexample
631@end defun
632
633@node Process Information
634@section Process Information
635
636 Several functions return information about processes.
637@code{list-processes} is provided for interactive use.
638
639@deffn Command list-processes &optional query-only
640This command displays a listing of all living processes. In addition,
641it finally deletes any process whose status was @samp{Exited} or
642@samp{Signaled}. It returns @code{nil}.
643
644If @var{query-only} is non-@code{nil} then it lists only processes
645whose query flag is non-@code{nil}. @xref{Query Before Exit}.
646@end deffn
647
648@defun process-list
649This function returns a list of all processes that have not been deleted.
650
651@smallexample
652@group
653(process-list)
654 @result{} (#<process display-time> #<process shell>)
655@end group
656@end smallexample
657@end defun
658
659@defun get-process name
660This function returns the process named @var{name}, or @code{nil} if
661there is none. An error is signaled if @var{name} is not a string.
662
663@smallexample
664@group
665(get-process "shell")
666 @result{} #<process shell>
667@end group
668@end smallexample
669@end defun
670
671@defun process-command process
672This function returns the command that was executed to start
673@var{process}. This is a list of strings, the first string being the
674program executed and the rest of the strings being the arguments that
675were given to the program.
676
677@smallexample
678@group
679(process-command (get-process "shell"))
680 @result{} ("/bin/csh" "-i")
681@end group
682@end smallexample
683@end defun
684
c73e02fa
GM
685@defun process-contact process &optional key
686
687This function returns information about how a network or serial
688process was set up. For a network process, when @var{key} is
689@code{nil}, it returns @code{(@var{hostname} @var{service})} which
690specifies what you connected to. For a serial process, when @var{key}
691is @code{nil}, it returns @code{(@var{port} @var{speed})}. For an
692ordinary child process, this function always returns @code{t}.
693
694If @var{key} is @code{t}, the value is the complete status information
695for the connection, server, or serial port; that is, the list of
696keywords and values specified in @code{make-network-process} or
697@code{make-serial-process}, except that some of the values represent
698the current status instead of what you specified.
699
700For a network process:
701
702@table @code
703@item :buffer
704The associated value is the process buffer.
705@item :filter
706The associated value is the process filter function.
707@item :sentinel
708The associated value is the process sentinel function.
709@item :remote
710In a connection, the address in internal format of the remote peer.
711@item :local
712The local address, in internal format.
713@item :service
714In a server, if you specified @code{t} for @var{service},
715this value is the actual port number.
716@end table
717
718@code{:local} and @code{:remote} are included even if they were not
719specified explicitly in @code{make-network-process}.
720
721For a serial process, see @code{make-serial-process} and
722@code{serial-process-configure} for a list of keys.
723
724If @var{key} is a keyword, the function returns the value corresponding
725to that keyword.
726@end defun
727
b8d4c8d0
GM
728@defun process-id process
729This function returns the @acronym{PID} of @var{process}. This is an
730integer that distinguishes the process @var{process} from all other
731processes running on the same computer at the current time. The
732@acronym{PID} of a process is chosen by the operating system kernel when the
733process is started and remains constant as long as the process exists.
734@end defun
735
736@defun process-name process
737This function returns the name of @var{process}.
738@end defun
739
740@defun process-status process-name
741This function returns the status of @var{process-name} as a symbol.
742The argument @var{process-name} must be a process, a buffer, a
743process name (string) or a buffer name (string).
744
745The possible values for an actual subprocess are:
746
747@table @code
748@item run
749for a process that is running.
750@item stop
751for a process that is stopped but continuable.
752@item exit
753for a process that has exited.
754@item signal
755for a process that has received a fatal signal.
756@item open
757for a network connection that is open.
758@item closed
759for a network connection that is closed. Once a connection
760is closed, you cannot reopen it, though you might be able to open
761a new connection to the same place.
762@item connect
763for a non-blocking connection that is waiting to complete.
764@item failed
765for a non-blocking connection that has failed to complete.
766@item listen
767for a network server that is listening.
768@item nil
769if @var{process-name} is not the name of an existing process.
770@end table
771
772@smallexample
773@group
774(process-status "shell")
775 @result{} run
776@end group
777@group
778(process-status (get-buffer "*shell*"))
779 @result{} run
780@end group
781@group
782x
783 @result{} #<process xx<1>>
784(process-status x)
785 @result{} exit
786@end group
787@end smallexample
788
789For a network connection, @code{process-status} returns one of the symbols
790@code{open} or @code{closed}. The latter means that the other side
791closed the connection, or Emacs did @code{delete-process}.
792@end defun
793
c73e02fa
GM
794@defun process-type process
795This function returns the symbol @code{network} for a network
796connection or server, @code{serial} for a serial port connection, or
797@code{real} for a real subprocess.
798@end defun
799
b8d4c8d0
GM
800@defun process-exit-status process
801This function returns the exit status of @var{process} or the signal
802number that killed it. (Use the result of @code{process-status} to
803determine which of those it is.) If @var{process} has not yet
804terminated, the value is 0.
805@end defun
806
807@defun process-tty-name process
808This function returns the terminal name that @var{process} is using for
809its communication with Emacs---or @code{nil} if it is using pipes
810instead of a terminal (see @code{process-connection-type} in
811@ref{Asynchronous Processes}).
812@end defun
813
814@defun process-coding-system process
815@anchor{Coding systems for a subprocess}
816This function returns a cons cell describing the coding systems in use
817for decoding output from @var{process} and for encoding input to
818@var{process} (@pxref{Coding Systems}). The value has this form:
819
820@example
821(@var{coding-system-for-decoding} . @var{coding-system-for-encoding})
822@end example
823@end defun
824
825@defun set-process-coding-system process &optional decoding-system encoding-system
826This function specifies the coding systems to use for subsequent output
827from and input to @var{process}. It will use @var{decoding-system} to
828decode subprocess output, and @var{encoding-system} to encode subprocess
829input.
830@end defun
831
832 Every process also has a property list that you can use to store
833miscellaneous values associated with the process.
834
835@defun process-get process propname
836This function returns the value of the @var{propname} property
837of @var{process}.
838@end defun
839
840@defun process-put process propname value
841This function sets the value of the @var{propname} property
842of @var{process} to @var{value}.
843@end defun
844
845@defun process-plist process
846This function returns the process plist of @var{process}.
847@end defun
848
849@defun set-process-plist process plist
850This function sets the process plist of @var{process} to @var{plist}.
851@end defun
852
853@node Input to Processes
854@section Sending Input to Processes
855@cindex process input
856
857 Asynchronous subprocesses receive input when it is sent to them by
858Emacs, which is done with the functions in this section. You must
859specify the process to send input to, and the input data to send. The
860data appears on the ``standard input'' of the subprocess.
861
862 Some operating systems have limited space for buffered input in a
863@acronym{PTY}. On these systems, Emacs sends an @acronym{EOF}
864periodically amidst the other characters, to force them through. For
865most programs, these @acronym{EOF}s do no harm.
866
867 Subprocess input is normally encoded using a coding system before the
868subprocess receives it, much like text written into a file. You can use
869@code{set-process-coding-system} to specify which coding system to use
870(@pxref{Process Information}). Otherwise, the coding system comes from
871@code{coding-system-for-write}, if that is non-@code{nil}; or else from
872the defaulting mechanism (@pxref{Default Coding Systems}).
873
874 Sometimes the system is unable to accept input for that process,
875because the input buffer is full. When this happens, the send functions
876wait a short while, accepting output from subprocesses, and then try
877again. This gives the subprocess a chance to read more of its pending
878input and make space in the buffer. It also allows filters, sentinels
879and timers to run---so take account of that in writing your code.
880
881 In these functions, the @var{process} argument can be a process or
882the name of a process, or a buffer or buffer name (which stands
883for a process via @code{get-buffer-process}). @code{nil} means
884the current buffer's process.
885
886@defun process-send-string process string
887This function sends @var{process} the contents of @var{string} as
888standard input. If it is @code{nil}, the current buffer's process is used.
889
890 The function returns @code{nil}.
891
892@smallexample
893@group
894(process-send-string "shell<1>" "ls\n")
895 @result{} nil
896@end group
897
898
899@group
900---------- Buffer: *shell* ----------
901...
902introduction.texi syntax-tables.texi~
903introduction.texi~ text.texi
904introduction.txt text.texi~
905...
906---------- Buffer: *shell* ----------
907@end group
908@end smallexample
909@end defun
910
911@defun process-send-region process start end
912This function sends the text in the region defined by @var{start} and
913@var{end} as standard input to @var{process}.
914
915An error is signaled unless both @var{start} and @var{end} are
916integers or markers that indicate positions in the current buffer. (It
917is unimportant which number is larger.)
918@end defun
919
920@defun process-send-eof &optional process
921This function makes @var{process} see an end-of-file in its
922input. The @acronym{EOF} comes after any text already sent to it.
923
924The function returns @var{process}.
925
926@smallexample
927@group
928(process-send-eof "shell")
929 @result{} "shell"
930@end group
931@end smallexample
932@end defun
933
934@defun process-running-child-p process
935This function will tell you whether a subprocess has given control of
936its terminal to its own child process. The value is @code{t} if this is
937true, or if Emacs cannot tell; it is @code{nil} if Emacs can be certain
938that this is not so.
939@end defun
940
941@node Signals to Processes
942@section Sending Signals to Processes
943@cindex process signals
944@cindex sending signals
945@cindex signals
946
947 @dfn{Sending a signal} to a subprocess is a way of interrupting its
948activities. There are several different signals, each with its own
949meaning. The set of signals and their names is defined by the operating
950system. For example, the signal @code{SIGINT} means that the user has
951typed @kbd{C-c}, or that some analogous thing has happened.
952
953 Each signal has a standard effect on the subprocess. Most signals
954kill the subprocess, but some stop or resume execution instead. Most
955signals can optionally be handled by programs; if the program handles
956the signal, then we can say nothing in general about its effects.
957
958 You can send signals explicitly by calling the functions in this
959section. Emacs also sends signals automatically at certain times:
960killing a buffer sends a @code{SIGHUP} signal to all its associated
961processes; killing Emacs sends a @code{SIGHUP} signal to all remaining
962processes. (@code{SIGHUP} is a signal that usually indicates that the
963user hung up the phone.)
964
965 Each of the signal-sending functions takes two optional arguments:
966@var{process} and @var{current-group}.
967
968 The argument @var{process} must be either a process, a process
969name, a buffer, a buffer name, or @code{nil}. A buffer or buffer name
970stands for a process through @code{get-buffer-process}. @code{nil}
971stands for the process associated with the current buffer. An error
972is signaled if @var{process} does not identify a process.
973
974 The argument @var{current-group} is a flag that makes a difference
975when you are running a job-control shell as an Emacs subprocess. If it
976is non-@code{nil}, then the signal is sent to the current process-group
977of the terminal that Emacs uses to communicate with the subprocess. If
978the process is a job-control shell, this means the shell's current
979subjob. If it is @code{nil}, the signal is sent to the process group of
980the immediate subprocess of Emacs. If the subprocess is a job-control
981shell, this is the shell itself.
982
983 The flag @var{current-group} has no effect when a pipe is used to
984communicate with the subprocess, because the operating system does not
985support the distinction in the case of pipes. For the same reason,
986job-control shells won't work when a pipe is used. See
987@code{process-connection-type} in @ref{Asynchronous Processes}.
988
989@defun interrupt-process &optional process current-group
990This function interrupts the process @var{process} by sending the
991signal @code{SIGINT}. Outside of Emacs, typing the ``interrupt
992character'' (normally @kbd{C-c} on some systems, and @code{DEL} on
993others) sends this signal. When the argument @var{current-group} is
994non-@code{nil}, you can think of this function as ``typing @kbd{C-c}''
995on the terminal by which Emacs talks to the subprocess.
996@end defun
997
998@defun kill-process &optional process current-group
999This function kills the process @var{process} by sending the
1000signal @code{SIGKILL}. This signal kills the subprocess immediately,
1001and cannot be handled by the subprocess.
1002@end defun
1003
1004@defun quit-process &optional process current-group
1005This function sends the signal @code{SIGQUIT} to the process
1006@var{process}. This signal is the one sent by the ``quit
1007character'' (usually @kbd{C-b} or @kbd{C-\}) when you are not inside
1008Emacs.
1009@end defun
1010
1011@defun stop-process &optional process current-group
1012This function stops the process @var{process} by sending the
1013signal @code{SIGTSTP}. Use @code{continue-process} to resume its
1014execution.
1015
1016Outside of Emacs, on systems with job control, the ``stop character''
1017(usually @kbd{C-z}) normally sends this signal. When
1018@var{current-group} is non-@code{nil}, you can think of this function as
1019``typing @kbd{C-z}'' on the terminal Emacs uses to communicate with the
1020subprocess.
1021@end defun
1022
1023@defun continue-process &optional process current-group
1024This function resumes execution of the process @var{process} by sending
1025it the signal @code{SIGCONT}. This presumes that @var{process} was
1026stopped previously.
1027@end defun
1028
1029@c Emacs 19 feature
1030@defun signal-process process signal
1031This function sends a signal to process @var{process}. The argument
1032@var{signal} specifies which signal to send; it should be an integer.
1033
1034The @var{process} argument can be a system process @acronym{ID}; that
1035allows you to send signals to processes that are not children of
23dd4ecd 1036Emacs. @xref{System Processes}.
b8d4c8d0
GM
1037@end defun
1038
1039@node Output from Processes
1040@section Receiving Output from Processes
1041@cindex process output
1042@cindex output from processes
1043
1044 There are two ways to receive the output that a subprocess writes to
1045its standard output stream. The output can be inserted in a buffer,
1046which is called the associated buffer of the process, or a function
1047called the @dfn{filter function} can be called to act on the output. If
1048the process has no buffer and no filter function, its output is
1049discarded.
1050
1051 When a subprocess terminates, Emacs reads any pending output,
1052then stops reading output from that subprocess. Therefore, if the
1053subprocess has children that are still live and still producing
1054output, Emacs won't receive that output.
1055
1056 Output from a subprocess can arrive only while Emacs is waiting: when
1057reading terminal input, in @code{sit-for} and @code{sleep-for}
1058(@pxref{Waiting}), and in @code{accept-process-output} (@pxref{Accepting
1059Output}). This minimizes the problem of timing errors that usually
1060plague parallel programming. For example, you can safely create a
1061process and only then specify its buffer or filter function; no output
1062can arrive before you finish, if the code in between does not call any
1063primitive that waits.
1064
1065@defvar process-adaptive-read-buffering
1066On some systems, when Emacs reads the output from a subprocess, the
1067output data is read in very small blocks, potentially resulting in
1068very poor performance. This behavior can be remedied to some extent
1069by setting the variable @var{process-adaptive-read-buffering} to a
1070non-@code{nil} value (the default), as it will automatically delay reading
1071from such processes, thus allowing them to produce more output before
1072Emacs tries to read it.
1073@end defvar
1074
1075 It is impossible to separate the standard output and standard error
1076streams of the subprocess, because Emacs normally spawns the subprocess
1077inside a pseudo-TTY, and a pseudo-TTY has only one output channel. If
1078you want to keep the output to those streams separate, you should
1079redirect one of them to a file---for example, by using an appropriate
1080shell command.
1081
1082@menu
1083* Process Buffers:: If no filter, output is put in a buffer.
1084* Filter Functions:: Filter functions accept output from the process.
1085* Decoding Output:: Filters can get unibyte or multibyte strings.
1086* Accepting Output:: How to wait until process output arrives.
1087@end menu
1088
1089@node Process Buffers
1090@subsection Process Buffers
1091
1092 A process can (and usually does) have an @dfn{associated buffer},
1093which is an ordinary Emacs buffer that is used for two purposes: storing
1094the output from the process, and deciding when to kill the process. You
1095can also use the buffer to identify a process to operate on, since in
1096normal practice only one process is associated with any given buffer.
1097Many applications of processes also use the buffer for editing input to
1098be sent to the process, but this is not built into Emacs Lisp.
1099
1100 Unless the process has a filter function (@pxref{Filter Functions}),
1101its output is inserted in the associated buffer. The position to insert
1102the output is determined by the @code{process-mark}, which is then
1103updated to point to the end of the text just inserted. Usually, but not
1104always, the @code{process-mark} is at the end of the buffer.
1105
1106@defun process-buffer process
1107This function returns the associated buffer of the process
1108@var{process}.
1109
1110@smallexample
1111@group
1112(process-buffer (get-process "shell"))
1113 @result{} #<buffer *shell*>
1114@end group
1115@end smallexample
1116@end defun
1117
1118@defun process-mark process
1119This function returns the process marker for @var{process}, which is the
1120marker that says where to insert output from the process.
1121
1122If @var{process} does not have a buffer, @code{process-mark} returns a
1123marker that points nowhere.
1124
1125Insertion of process output in a buffer uses this marker to decide where
1126to insert, and updates it to point after the inserted text. That is why
1127successive batches of output are inserted consecutively.
1128
1129Filter functions normally should use this marker in the same fashion
1130as is done by direct insertion of output in the buffer. A good
1131example of a filter function that uses @code{process-mark} is found at
1132the end of the following section.
1133
1134When the user is expected to enter input in the process buffer for
1135transmission to the process, the process marker separates the new input
1136from previous output.
1137@end defun
1138
1139@defun set-process-buffer process buffer
1140This function sets the buffer associated with @var{process} to
1141@var{buffer}. If @var{buffer} is @code{nil}, the process becomes
1142associated with no buffer.
1143@end defun
1144
1145@defun get-buffer-process buffer-or-name
1146This function returns a nondeleted process associated with the buffer
1147specified by @var{buffer-or-name}. If there are several processes
1148associated with it, this function chooses one (currently, the one most
1149recently created, but don't count on that). Deletion of a process
1150(see @code{delete-process}) makes it ineligible for this function to
1151return.
1152
1153It is usually a bad idea to have more than one process associated with
1154the same buffer.
1155
1156@smallexample
1157@group
1158(get-buffer-process "*shell*")
1159 @result{} #<process shell>
1160@end group
1161@end smallexample
1162
1163Killing the process's buffer deletes the process, which kills the
1164subprocess with a @code{SIGHUP} signal (@pxref{Signals to Processes}).
1165@end defun
1166
1167@node Filter Functions
1168@subsection Process Filter Functions
1169@cindex filter function
1170@cindex process filter
1171
1172 A process @dfn{filter function} is a function that receives the
1173standard output from the associated process. If a process has a filter,
1174then @emph{all} output from that process is passed to the filter. The
1175process buffer is used directly for output from the process only when
1176there is no filter.
1177
1178 The filter function can only be called when Emacs is waiting for
1179something, because process output arrives only at such times. Emacs
1180waits when reading terminal input, in @code{sit-for} and
1181@code{sleep-for} (@pxref{Waiting}), and in @code{accept-process-output}
1182(@pxref{Accepting Output}).
1183
1184 A filter function must accept two arguments: the associated process
1185and a string, which is output just received from it. The function is
1186then free to do whatever it chooses with the output.
1187
1188 Quitting is normally inhibited within a filter function---otherwise,
1189the effect of typing @kbd{C-g} at command level or to quit a user
1190command would be unpredictable. If you want to permit quitting inside
1191a filter function, bind @code{inhibit-quit} to @code{nil}. In most
1192cases, the right way to do this is with the macro
1193@code{with-local-quit}. @xref{Quitting}.
1194
1195 If an error happens during execution of a filter function, it is
1196caught automatically, so that it doesn't stop the execution of whatever
1197program was running when the filter function was started. However, if
1198@code{debug-on-error} is non-@code{nil}, the error-catching is turned
1199off. This makes it possible to use the Lisp debugger to debug the
1200filter function. @xref{Debugger}.
1201
1202 Many filter functions sometimes or always insert the text in the
1203process's buffer, mimicking the actions of Emacs when there is no
1204filter. Such filter functions need to use @code{set-buffer} in order to
1205be sure to insert in that buffer. To avoid setting the current buffer
1206semipermanently, these filter functions must save and restore the
1207current buffer. They should also update the process marker, and in some
1208cases update the value of point. Here is how to do these things:
1209
1210@smallexample
1211@group
1212(defun ordinary-insertion-filter (proc string)
1213 (with-current-buffer (process-buffer proc)
1214 (let ((moving (= (point) (process-mark proc))))
1215@end group
1216@group
1217 (save-excursion
1218 ;; @r{Insert the text, advancing the process marker.}
1219 (goto-char (process-mark proc))
1220 (insert string)
1221 (set-marker (process-mark proc) (point)))
1222 (if moving (goto-char (process-mark proc))))))
1223@end group
1224@end smallexample
1225
1226@noindent
1227The reason to use @code{with-current-buffer}, rather than using
1228@code{save-excursion} to save and restore the current buffer, is so as
1229to preserve the change in point made by the second call to
1230@code{goto-char}.
1231
1232 To make the filter force the process buffer to be visible whenever new
1233text arrives, insert the following line just before the
1234@code{with-current-buffer} construct:
1235
1236@smallexample
1237(display-buffer (process-buffer proc))
1238@end smallexample
1239
1240 To force point to the end of the new output, no matter where it was
1241previously, eliminate the variable @code{moving} and call
1242@code{goto-char} unconditionally.
1243
1244 In earlier Emacs versions, every filter function that did regular
1245expression searching or matching had to explicitly save and restore the
1246match data. Now Emacs does this automatically for filter functions;
1247they never need to do it explicitly. @xref{Match Data}.
1248
1249 A filter function that writes the output into the buffer of the
1250process should check whether the buffer is still alive. If it tries to
1251insert into a dead buffer, it will get an error. The expression
1252@code{(buffer-name (process-buffer @var{process}))} returns @code{nil}
1253if the buffer is dead.
1254
1255 The output to the function may come in chunks of any size. A program
1256that produces the same output twice in a row may send it as one batch of
1257200 characters one time, and five batches of 40 characters the next. If
1258the filter looks for certain text strings in the subprocess output, make
1259sure to handle the case where one of these strings is split across two
1260or more batches of output.
1261
1262@defun set-process-filter process filter
1263This function gives @var{process} the filter function @var{filter}. If
1264@var{filter} is @code{nil}, it gives the process no filter.
1265@end defun
1266
1267@defun process-filter process
1268This function returns the filter function of @var{process}, or @code{nil}
1269if it has none.
1270@end defun
1271
1272 Here is an example of use of a filter function:
1273
1274@smallexample
1275@group
1276(defun keep-output (process output)
1277 (setq kept (cons output kept)))
1278 @result{} keep-output
1279@end group
1280@group
1281(setq kept nil)
1282 @result{} nil
1283@end group
1284@group
1285(set-process-filter (get-process "shell") 'keep-output)
1286 @result{} keep-output
1287@end group
1288@group
1289(process-send-string "shell" "ls ~/other\n")
1290 @result{} nil
1291kept
1292 @result{} ("lewis@@slug[8] % "
1293@end group
1294@group
1295"FINAL-W87-SHORT.MSS backup.otl kolstad.mss~
1296address.txt backup.psf kolstad.psf
1297backup.bib~ david.mss resume-Dec-86.mss~
1298backup.err david.psf resume-Dec.psf
1299backup.mss dland syllabus.mss
1300"
1301"#backups.mss# backup.mss~ kolstad.mss
1302")
1303@end group
1304@end smallexample
1305
1306@ignore @c The code in this example doesn't show the right way to do things.
1307Here is another, more realistic example, which demonstrates how to use
1308the process mark to do insertion in the same fashion as is done when
1309there is no filter function:
1310
1311@smallexample
1312@group
1313;; @r{Insert input in the buffer specified by @code{my-shell-buffer}}
1314;; @r{and make sure that buffer is shown in some window.}
1315(defun my-process-filter (proc str)
1316 (let ((cur (selected-window))
1317 (pop-up-windows t))
1318 (pop-to-buffer my-shell-buffer)
1319@end group
1320@group
1321 (goto-char (point-max))
1322 (insert str)
1323 (set-marker (process-mark proc) (point-max))
1324 (select-window cur)))
1325@end group
1326@end smallexample
1327@end ignore
1328
1329@node Decoding Output
1330@subsection Decoding Process Output
1331@cindex decode process output
1332
1333 When Emacs writes process output directly into a multibyte buffer,
1334it decodes the output according to the process output coding system.
1335If the coding system is @code{raw-text} or @code{no-conversion}, Emacs
1336converts the unibyte output to multibyte using
1337@code{string-to-multibyte}, and inserts the resulting multibyte text.
1338
1339 You can use @code{set-process-coding-system} to specify which coding
1340system to use (@pxref{Process Information}). Otherwise, the coding
1341system comes from @code{coding-system-for-read}, if that is
1342non-@code{nil}; or else from the defaulting mechanism (@pxref{Default
1343Coding Systems}).
1344
1345 @strong{Warning:} Coding systems such as @code{undecided} which
1346determine the coding system from the data do not work entirely
1347reliably with asynchronous subprocess output. This is because Emacs
1348has to process asynchronous subprocess output in batches, as it
1349arrives. Emacs must try to detect the proper coding system from one
1350batch at a time, and this does not always work. Therefore, if at all
1351possible, specify a coding system that determines both the character
1352code conversion and the end of line conversion---that is, one like
1353@code{latin-1-unix}, rather than @code{undecided} or @code{latin-1}.
1354
4972c361
SM
1355@c Let's keep the index entries that were there for
1356@c set-process-filter-multibyte and process-filter-multibyte-p,
b8d4c8d0
GM
1357@cindex filter multibyte flag, of process
1358@cindex process filter multibyte flag
1359 When Emacs calls a process filter function, it provides the process
1360output as a multibyte string or as a unibyte string according to the
4972c361
SM
1361process's filter coding system. Emacs
1362decodes the output according to the process output coding system,
1363which usually produces a multibyte string, except for coding systems
1364such as @code{binary} and @code{raw-text}
b8d4c8d0
GM
1365
1366@node Accepting Output
1367@subsection Accepting Output from Processes
1368@cindex accept input from processes
1369
1370 Output from asynchronous subprocesses normally arrives only while
1371Emacs is waiting for some sort of external event, such as elapsed time
1372or terminal input. Occasionally it is useful in a Lisp program to
1373explicitly permit output to arrive at a specific point, or even to wait
1374until output arrives from a process.
1375
1376@defun accept-process-output &optional process seconds millisec just-this-one
1377This function allows Emacs to read pending output from processes. The
1378output is inserted in the associated buffers or given to their filter
1379functions. If @var{process} is non-@code{nil} then this function does
1380not return until some output has been received from @var{process}.
1381
1382@c Emacs 19 feature
1383The arguments @var{seconds} and @var{millisec} let you specify timeout
1384periods. The former specifies a period measured in seconds and the
1385latter specifies one measured in milliseconds. The two time periods
1386thus specified are added together, and @code{accept-process-output}
1387returns after that much time, whether or not there has been any
1388subprocess output.
1389
1390The argument @var{millisec} is semi-obsolete nowadays because
1391@var{seconds} can be a floating point number to specify waiting a
1392fractional number of seconds. If @var{seconds} is 0, the function
1393accepts whatever output is pending but does not wait.
1394
1395@c Emacs 22.1 feature
1396If @var{process} is a process, and the argument @var{just-this-one} is
1397non-@code{nil}, only output from that process is handled, suspending output
1398from other processes until some output has been received from that
1399process or the timeout expires. If @var{just-this-one} is an integer,
1400also inhibit running timers. This feature is generally not
1401recommended, but may be necessary for specific applications, such as
1402speech synthesis.
1403
1404The function @code{accept-process-output} returns non-@code{nil} if it
1405did get some output, or @code{nil} if the timeout expired before output
1406arrived.
1407@end defun
1408
1409@node Sentinels
1410@section Sentinels: Detecting Process Status Changes
1411@cindex process sentinel
1412@cindex sentinel (of process)
1413
1414 A @dfn{process sentinel} is a function that is called whenever the
1415associated process changes status for any reason, including signals
1416(whether sent by Emacs or caused by the process's own actions) that
1417terminate, stop, or continue the process. The process sentinel is
1418also called if the process exits. The sentinel receives two
1419arguments: the process for which the event occurred, and a string
1420describing the type of event.
1421
1422 The string describing the event looks like one of the following:
1423
1424@itemize @bullet
1425@item
1426@code{"finished\n"}.
1427
1428@item
1429@code{"exited abnormally with code @var{exitcode}\n"}.
1430
1431@item
1432@code{"@var{name-of-signal}\n"}.
1433
1434@item
1435@code{"@var{name-of-signal} (core dumped)\n"}.
1436@end itemize
1437
1438 A sentinel runs only while Emacs is waiting (e.g., for terminal
1439input, or for time to elapse, or for process output). This avoids the
1440timing errors that could result from running them at random places in
1441the middle of other Lisp programs. A program can wait, so that
1442sentinels will run, by calling @code{sit-for} or @code{sleep-for}
1443(@pxref{Waiting}), or @code{accept-process-output} (@pxref{Accepting
1444Output}). Emacs also allows sentinels to run when the command loop is
1445reading input. @code{delete-process} calls the sentinel when it
1446terminates a running process.
1447
1448 Emacs does not keep a queue of multiple reasons to call the sentinel
1449of one process; it records just the current status and the fact that
1450there has been a change. Therefore two changes in status, coming in
1451quick succession, can call the sentinel just once. However, process
1452termination will always run the sentinel exactly once. This is
1453because the process status can't change again after termination.
1454
1455 Emacs explicitly checks for output from the process before running
1456the process sentinel. Once the sentinel runs due to process
1457termination, no further output can arrive from the process.
1458
1459 A sentinel that writes the output into the buffer of the process
1460should check whether the buffer is still alive. If it tries to insert
1461into a dead buffer, it will get an error. If the buffer is dead,
1462@code{(buffer-name (process-buffer @var{process}))} returns @code{nil}.
1463
1464 Quitting is normally inhibited within a sentinel---otherwise, the
1465effect of typing @kbd{C-g} at command level or to quit a user command
1466would be unpredictable. If you want to permit quitting inside a
1467sentinel, bind @code{inhibit-quit} to @code{nil}. In most cases, the
1468right way to do this is with the macro @code{with-local-quit}.
1469@xref{Quitting}.
1470
1471 If an error happens during execution of a sentinel, it is caught
1472automatically, so that it doesn't stop the execution of whatever
1473programs was running when the sentinel was started. However, if
1474@code{debug-on-error} is non-@code{nil}, the error-catching is turned
1475off. This makes it possible to use the Lisp debugger to debug the
1476sentinel. @xref{Debugger}.
1477
1478 While a sentinel is running, the process sentinel is temporarily
1479set to @code{nil} so that the sentinel won't run recursively.
1480For this reason it is not possible for a sentinel to specify
1481a new sentinel.
1482
1483 In earlier Emacs versions, every sentinel that did regular expression
1484searching or matching had to explicitly save and restore the match data.
1485Now Emacs does this automatically for sentinels; they never need to do
1486it explicitly. @xref{Match Data}.
1487
1488@defun set-process-sentinel process sentinel
1489This function associates @var{sentinel} with @var{process}. If
1490@var{sentinel} is @code{nil}, then the process will have no sentinel.
1491The default behavior when there is no sentinel is to insert a message in
1492the process's buffer when the process status changes.
1493
1494Changes in process sentinel take effect immediately---if the sentinel
1495is slated to be run but has not been called yet, and you specify a new
1496sentinel, the eventual call to the sentinel will use the new one.
1497
1498@smallexample
1499@group
1500(defun msg-me (process event)
1501 (princ
1502 (format "Process: %s had the event `%s'" process event)))
1503(set-process-sentinel (get-process "shell") 'msg-me)
1504 @result{} msg-me
1505@end group
1506@group
1507(kill-process (get-process "shell"))
1508 @print{} Process: #<process shell> had the event `killed'
1509 @result{} #<process shell>
1510@end group
1511@end smallexample
1512@end defun
1513
1514@defun process-sentinel process
1515This function returns the sentinel of @var{process}, or @code{nil} if it
1516has none.
1517@end defun
1518
1519@defun waiting-for-user-input-p
1520While a sentinel or filter function is running, this function returns
1521non-@code{nil} if Emacs was waiting for keyboard input from the user at
1522the time the sentinel or filter function was called, @code{nil} if it
1523was not.
1524@end defun
1525
1526@node Query Before Exit
1527@section Querying Before Exit
1528
1529 When Emacs exits, it terminates all its subprocesses by sending them
1530the @code{SIGHUP} signal. Because subprocesses may be doing
1531valuable work, Emacs normally asks the user to confirm that it is ok
1532to terminate them. Each process has a query flag which, if
1533non-@code{nil}, says that Emacs should ask for confirmation before
1534exiting and thus killing that process. The default for the query flag
1535is @code{t}, meaning @emph{do} query.
1536
1537@defun process-query-on-exit-flag process
1538This returns the query flag of @var{process}.
1539@end defun
1540
1541@defun set-process-query-on-exit-flag process flag
1542This function sets the query flag of @var{process} to @var{flag}. It
1543returns @var{flag}.
1544
1545@smallexample
1546@group
1547;; @r{Don't query about the shell process}
1548(set-process-query-on-exit-flag (get-process "shell") nil)
1549 @result{} t
1550@end group
1551@end smallexample
1552@end defun
1553
1554@defun process-kill-without-query process &optional do-query
1555This function clears the query flag of @var{process}, so that
1556Emacs will not query the user on account of that process.
1557
1558Actually, the function does more than that: it returns the old value of
1559the process's query flag, and sets the query flag to @var{do-query}.
1560Please don't use this function to do those things any more---please
1561use the newer, cleaner functions @code{process-query-on-exit-flag} and
1562@code{set-process-query-on-exit-flag} in all but the simplest cases.
1563The only way you should use @code{process-kill-without-query} nowadays
1564is like this:
1565
1566@smallexample
1567@group
1568;; @r{Don't query about the shell process}
1569(process-kill-without-query (get-process "shell"))
1570@end group
1571@end smallexample
1572@end defun
1573
23dd4ecd
EZ
1574@node System Processes
1575@section Accessing Other Processes
1576@cindex system processes
1577
1578 In addition to accessing and manipulating processes that are
1579subprocesses of the current Emacs session, Emacs Lisp programs can
1580also access other processes running on the same machine. We call
1581these @dfn{system processes}, to distinguish between them and Emacs
1582subprocesses.
1583
1584 Emacs provides several primitives for accessing system processes.
1585Not all platforms support these primitives; on those which don't,
1586these primitives return @code{nil}.
1587
1588@defun list-system-processes
1589This function returns a list of all the processes running on the
1590system. Each process is identified by its @acronym{PID}, a numerical
1591process ID that is assigned by the OS and distinguishes the process
1592from all the other processes running on the same machine at the same
1593time.
1594@end defun
1595
1596@defun system-process-attributes pid
1597This function returns an alist of attributes for the process specified
1598by its process ID @var{pid}. Each association in the alist is of the
1599form @code{(@var{key} . @var{value})}, where @var{key} designates the
1600attribute and @var{value} is the value of that attribute. The various
1601attribute @var{key}'s that this function can return are listed below.
1602Not all platforms support all of these attributes; if an attribute is
1603not supported, its association will not appear in the returned alist.
1604Values that are numbers can be either integer or floating-point,
1605depending on the magnitude of the value.
1606
1607@table @code
1608@item euid
1609The effective user ID of the user who invoked the process. The
1610corresponding @var{value} is a number. If the process was invoked by
1611the same user who runs the current Emacs session, the value is
1612identical to what @code{user-uid} returns (@pxref{User
1613Identification}).
1614
1615@item user
1616User name corresponding to the process's effective user ID, a string.
1617
1618@item egid
1619The group ID of the effective user ID, a number.
1620
1621@item group
1622Group name corresponding to the effective user's group ID, a string.
1623
1624@item comm
1625The name of the command that runs in the process. This is a string
1626that usually specifies the name of the executable file of the process,
1627without the leading directories. However, some special system
1628processes can report strings that do not correspond to an executable
1629file of a program.
1630
1631@item state
1632The state code of the process. This is a short string that encodes
1633the scheduling state of the process. Here's a list of the most
1634frequently seen codes:
1635
1636@table @code
1dca458f 1637@item "D"
23dd4ecd 1638uninterruptible sleep (usually I/O)
1dca458f 1639@item "R"
23dd4ecd 1640running
1dca458f 1641@item "S"
23dd4ecd 1642interruptible sleep (waiting for some event)
1dca458f 1643@item "T"
23dd4ecd 1644stopped, e.g., by a job control signal
1dca458f
EZ
1645@item "Z"
1646``zombie'': a process that terminated, but was not reaped by its parent
23dd4ecd
EZ
1647@end table
1648
1649@noindent
1650For the full list of the possible states, see the manual page of the
1651@command{ps} command.
1652
1653@item ppid
1654The process ID of the parent process, a number.
1655
1656@item pgrp
1657The process group ID of the process, a number.
1658
1659@item sess
1660The session ID of the process. This is a number that is the process
1661ID of the process's @dfn{session leader}.
1662
1663@item ttname
1664A string that is the name of the process's controlling terminal. On
1665Unix and GNU systems, this is normally the file name of the
1666corresponding terminal device, such as @file{/dev/pts65}.
1667
1668@item tpgid
1669The numerical process group ID of the foreground process group that
1670uses the process's terminal.
1671
1672@item minflt
1673The number of minor page faults caused by the process since its
1674beginning. (Minor page faults are those that don't involve reading
1675from disk.)
1676
1677@item majflt
1678The number of major page faults caused by the process since its
1679beginning. (Major page faults require a disk to be read, and are thus
1680more expensive than minor page faults.)
1681
1682@item cminflt
1683@itemx cmajflt
1684Like @code{minflt} and @code{majflt}, but include the number of page
1685faults for all the child processes of the given process.
1686
1687@item utime
1688Time spent by the process in the user context, for running the
1689application's code. The corresponding @var{value} is in the
1690@w{@code{(@var{high} @var{low} @var{microsec})}} format, the same
1691format used by functions @code{current-time} (@pxref{Time of Day,
1692current-time}) and @code{file-attributes} (@pxref{File Attributes}).
1693
1694@item stime
1695Time spent by the process in the system (kernel) context, for
1696processing system calls. The corresponding @var{value} is in the same
1697format as for @code{utime}.
1698
1699@item cutime
1700@itemx cstime
1701Like @code{utime} and @code{stime}, but includes the times of all the
1702child processes of the given process.
1703
1704@item pri
1705The numerical priority of the process.
1706
1707@item nice
1dca458f
EZ
1708The @dfn{nice value} of the process, a number. (Processes with smaller
1709nice values get scheduled more favorably.)
23dd4ecd
EZ
1710
1711@item thcount
1712The number of threads in the process.
1713
1714@item start
1715The time the process was started, in the @w{@code{(@var{high}
1716@var{low} @var{microsec})}} format used by @code{current-time} and
1717@code{file-attributes}.
1718
1719@item etime
1720The time elapsed since the process started, in the @w{@code{(@var{high}
1721@var{low} @var{microsec})}} format.
1722
1723@item vsize
1724The virtual memory size of the process, measured in kilobytes.
1725
1726@item rss
1727The size of the process's @dfn{resident set}, the number of kilobytes
1728occupied by the process in the machine's physical memory.
1729
1730@item pcpu
1731The percentage of the CPU time used by the process since it started.
1732The corresponding @var{value} is a floating-point number between 0 and
1733100.
1734
1735@item pmem
1736The percentage of the total physical memory installed on the machine
1737used by the process's resident set. The value is a floating-point
1738number between 0 and 100.
1739
1740@item args
1741The command-line with which the process was invoked. This is a string
1742in which individual command-line arguments are separated by blanks;
1743whitespace characters that are embedded in the arguments are quoted as
1744appropriate for the system's shell: escaped by backslash characters on
1745GNU and Unix, and enclosed in double quote characters on Windows.
1746Thus, this command-line string can be directly used in primitives such
1747as @code{shell-command}.
1748@end table
1749
1750@end defun
1751
1752
b8d4c8d0
GM
1753@node Transaction Queues
1754@section Transaction Queues
1755@cindex transaction queue
1756
1757You can use a @dfn{transaction queue} to communicate with a subprocess
1758using transactions. First use @code{tq-create} to create a transaction
1759queue communicating with a specified process. Then you can call
1760@code{tq-enqueue} to send a transaction.
1761
1762@defun tq-create process
1763This function creates and returns a transaction queue communicating with
1764@var{process}. The argument @var{process} should be a subprocess
1765capable of sending and receiving streams of bytes. It may be a child
1766process, or it may be a TCP connection to a server, possibly on another
1767machine.
1768@end defun
1769
1770@defun tq-enqueue queue question regexp closure fn &optional delay-question
1771This function sends a transaction to queue @var{queue}. Specifying the
1772queue has the effect of specifying the subprocess to talk to.
1773
1774The argument @var{question} is the outgoing message that starts the
1775transaction. The argument @var{fn} is the function to call when the
1776corresponding answer comes back; it is called with two arguments:
1777@var{closure}, and the answer received.
1778
1779The argument @var{regexp} is a regular expression that should match
1780text at the end of the entire answer, but nothing before; that's how
1781@code{tq-enqueue} determines where the answer ends.
1782
1783If the argument @var{delay-question} is non-nil, delay sending this
1784question until the process has finished replying to any previous
1785questions. This produces more reliable results with some processes.
1786
1787The return value of @code{tq-enqueue} itself is not meaningful.
1788@end defun
1789
1790@defun tq-close queue
1791Shut down transaction queue @var{queue}, waiting for all pending transactions
1792to complete, and then terminate the connection or child process.
1793@end defun
1794
1795Transaction queues are implemented by means of a filter function.
1796@xref{Filter Functions}.
1797
1798@node Network
1799@section Network Connections
1800@cindex network connection
1801@cindex TCP
1802@cindex UDP
1803
1804 Emacs Lisp programs can open stream (TCP) and datagram (UDP) network
1805connections to other processes on the same machine or other machines.
1806A network connection is handled by Lisp much like a subprocess, and is
1807represented by a process object. However, the process you are
1808communicating with is not a child of the Emacs process, so it has no
1809process @acronym{ID}, and you can't kill it or send it signals. All you
1810can do is send and receive data. @code{delete-process} closes the
1811connection, but does not kill the program at the other end; that
1812program must decide what to do about closure of the connection.
1813
1814 Lisp programs can listen for connections by creating network
1815servers. A network server is also represented by a kind of process
1816object, but unlike a network connection, the network server never
1817transfers data itself. When it receives a connection request, it
1818creates a new network connection to represent the connection just
1819made. (The network connection inherits certain information, including
1820the process plist, from the server.) The network server then goes
1821back to listening for more connection requests.
1822
1823 Network connections and servers are created by calling
1824@code{make-network-process} with an argument list consisting of
1825keyword/argument pairs, for example @code{:server t} to create a
1826server process, or @code{:type 'datagram} to create a datagram
1827connection. @xref{Low-Level Network}, for details. You can also use
1828the @code{open-network-stream} function described below.
1829
c73e02fa
GM
1830 To distinguish the different types of processes, the
1831@code{process-type} function returns the symbol @code{network} for a
1832network connection or server, @code{serial} for a serial port
1833connection, or @code{real} for a real subprocess.
1834
1835 The @code{process-status} function returns @code{open},
1836@code{closed}, @code{connect}, and @code{failed} for network
1837connections. For a network server, the status is always
b8d4c8d0
GM
1838@code{listen}. None of those values is possible for a real
1839subprocess. @xref{Process Information}.
1840
1841 You can stop and resume operation of a network process by calling
1842@code{stop-process} and @code{continue-process}. For a server
1843process, being stopped means not accepting new connections. (Up to 5
1844connection requests will be queued for when you resume the server; you
1845can increase this limit, unless it is imposed by the operating
1846system.) For a network stream connection, being stopped means not
1847processing input (any arriving input waits until you resume the
1848connection). For a datagram connection, some number of packets may be
1849queued but input may be lost. You can use the function
1850@code{process-command} to determine whether a network connection or
1851server is stopped; a non-@code{nil} value means yes.
1852
1853@defun open-network-stream name buffer-or-name host service
1854This function opens a TCP connection, and returns a process object
1855that represents the connection.
1856
1857The @var{name} argument specifies the name for the process object. It
1858is modified as necessary to make it unique.
1859
1860The @var{buffer-or-name} argument is the buffer to associate with the
1861connection. Output from the connection is inserted in the buffer,
1862unless you specify a filter function to handle the output. If
1863@var{buffer-or-name} is @code{nil}, it means that the connection is not
1864associated with any buffer.
1865
1866The arguments @var{host} and @var{service} specify where to connect to;
1867@var{host} is the host name (a string), and @var{service} is the name of
1868a defined network service (a string) or a port number (an integer).
1869@end defun
1870
b8d4c8d0
GM
1871@node Network Servers
1872@section Network Servers
1873@cindex network servers
1874
1875 You create a server by calling @code{make-network-process} with
1876@code{:server t}. The server will listen for connection requests from
1877clients. When it accepts a client connection request, that creates a
1878new network connection, itself a process object, with the following
1879parameters:
1880
1881@itemize @bullet
1882@item
1883The connection's process name is constructed by concatenating the
1884server process' @var{name} with a client identification string. The
1885client identification string for an IPv4 connection looks like
1886@samp{<@var{a}.@var{b}.@var{c}.@var{d}:@var{p}>}. Otherwise, it is a
1887unique number in brackets, as in @samp{<@var{nnn}>}. The number
1888is unique for each connection in the Emacs session.
1889
1890@item
1891If the server's filter is non-@code{nil}, the connection process does
1892not get a separate process buffer; otherwise, Emacs creates a new
1893buffer for the purpose. The buffer name is the server's buffer name
1894or process name, concatenated with the client identification string.
1895
1896The server's process buffer value is never used directly by Emacs, but
1897it is passed to the log function, which can log connections by
1898inserting text there.
1899
1900@item
1901The communication type and the process filter and sentinel are
1902inherited from those of the server. The server never directly
1903uses its filter and sentinel; their sole purpose is to initialize
1904connections made to the server.
1905
1906@item
1907The connection's process contact info is set according to the client's
1908addressing information (typically an IP address and a port number).
1909This information is associated with the @code{process-contact}
1910keywords @code{:host}, @code{:service}, @code{:remote}.
1911
1912@item
1913The connection's local address is set up according to the port
1914number used for the connection.
1915
1916@item
1917The client process' plist is initialized from the server's plist.
1918@end itemize
1919
1920@node Datagrams
1921@section Datagrams
1922@cindex datagrams
1923
1924 A datagram connection communicates with individual packets rather
1925than streams of data. Each call to @code{process-send} sends one
1926datagram packet (@pxref{Input to Processes}), and each datagram
1927received results in one call to the filter function.
1928
1929 The datagram connection doesn't have to talk with the same remote
1930peer all the time. It has a @dfn{remote peer address} which specifies
1931where to send datagrams to. Each time an incoming datagram is passed
1932to the filter function, the peer address is set to the address that
1933datagram came from; that way, if the filter function sends a datagram,
1934it will go back to that place. You can specify the remote peer
1935address when you create the datagram connection using the
1936@code{:remote} keyword. You can change it later on by calling
1937@code{set-process-datagram-address}.
1938
1939@defun process-datagram-address process
1940If @var{process} is a datagram connection or server, this function
1941returns its remote peer address.
1942@end defun
1943
1944@defun set-process-datagram-address process address
1945If @var{process} is a datagram connection or server, this function
1946sets its remote peer address to @var{address}.
1947@end defun
1948
1949@node Low-Level Network
1950@section Low-Level Network Access
1951
1952 You can also create network connections by operating at a lower
1953level than that of @code{open-network-stream}, using
1954@code{make-network-process}.
1955
1956@menu
1957* Proc: Network Processes. Using @code{make-network-process}.
1958* Options: Network Options. Further control over network connections.
1959* Features: Network Feature Testing.
1960 Determining which network features work on
1961 the machine you are using.
1962@end menu
1963
1964@node Network Processes
1965@subsection @code{make-network-process}
1966
1967 The basic function for creating network connections and network
1968servers is @code{make-network-process}. It can do either of those
1969jobs, depending on the arguments you give it.
1970
1971@defun make-network-process &rest args
1972This function creates a network connection or server and returns the
1973process object that represents it. The arguments @var{args} are a
1974list of keyword/argument pairs. Omitting a keyword is always
1975equivalent to specifying it with value @code{nil}, except for
1976@code{:coding}, @code{:filter-multibyte}, and @code{:reuseaddr}. Here
1977are the meaningful keywords:
1978
1979@table @asis
1980@item :name @var{name}
1981Use the string @var{name} as the process name. It is modified if
1982necessary to make it unique.
1983
1984@item :type @var{type}
1985Specify the communication type. A value of @code{nil} specifies a
1986stream connection (the default); @code{datagram} specifies a datagram
1987connection. Both connections and servers can be of either type.
1988
1989@item :server @var{server-flag}
1990If @var{server-flag} is non-@code{nil}, create a server. Otherwise,
1991create a connection. For a stream type server, @var{server-flag} may
1992be an integer which then specifies the length of the queue of pending
1993connections to the server. The default queue length is 5.
1994
1995@item :host @var{host}
1996Specify the host to connect to. @var{host} should be a host name or
1997Internet address, as a string, or the symbol @code{local} to specify
1998the local host. If you specify @var{host} for a server, it must
1999specify a valid address for the local host, and only clients
2000connecting to that address will be accepted.
2001
2002@item :service @var{service}
2003@var{service} specifies a port number to connect to, or, for a server,
2004the port number to listen on. It should be a service name that
2005translates to a port number, or an integer specifying the port number
2006directly. For a server, it can also be @code{t}, which means to let
2007the system select an unused port number.
2008
2009@item :family @var{family}
2010@var{family} specifies the address (and protocol) family for
2011communication. @code{nil} means determine the proper address family
2012automatically for the given @var{host} and @var{service}.
2013@code{local} specifies a Unix socket, in which case @var{host} is
2014ignored. @code{ipv4} and @code{ipv6} specify to use IPv4 and IPv6
2015respectively.
2016
2017@item :local @var{local-address}
2018For a server process, @var{local-address} is the address to listen on.
2019It overrides @var{family}, @var{host} and @var{service}, and you
2020may as well not specify them.
2021
2022@item :remote @var{remote-address}
2023For a connection, @var{remote-address} is the address to connect to.
2024It overrides @var{family}, @var{host} and @var{service}, and you
2025may as well not specify them.
2026
2027For a datagram server, @var{remote-address} specifies the initial
2028setting of the remote datagram address.
2029
2030The format of @var{local-address} or @var{remote-address} depends on
2031the address family:
2032
2033@itemize -
2034@item
2035An IPv4 address is represented as a five-element vector of four 8-bit
2036integers and one 16-bit integer
2037@code{[@var{a} @var{b} @var{c} @var{d} @var{p}]} corresponding to
2038numeric IPv4 address @var{a}.@var{b}.@var{c}.@var{d} and port number
2039@var{p}.
2040
2041@item
2042An IPv6 address is represented as a nine-element vector of 16-bit
2043integers @code{[@var{a} @var{b} @var{c} @var{d} @var{e} @var{f}
2044@var{g} @var{h} @var{p}]} corresponding to numeric IPv6 address
2045@var{a}:@var{b}:@var{c}:@var{d}:@var{e}:@var{f}:@var{g}:@var{h} and
2046port number @var{p}.
2047
2048@item
2049A local address is represented as a string which specifies the address
2050in the local address space.
2051
2052@item
2053An ``unsupported family'' address is represented by a cons
2054@code{(@var{f} . @var{av})}, where @var{f} is the family number and
2055@var{av} is a vector specifying the socket address using one element
2056per address data byte. Do not rely on this format in portable code,
2057as it may depend on implementation defined constants, data sizes, and
2058data structure alignment.
2059@end itemize
2060
2061@item :nowait @var{bool}
2062If @var{bool} is non-@code{nil} for a stream connection, return
2063without waiting for the connection to complete. When the connection
2064succeeds or fails, Emacs will call the sentinel function, with a
2065second argument matching @code{"open"} (if successful) or
2066@code{"failed"}. The default is to block, so that
2067@code{make-network-process} does not return until the connection
2068has succeeded or failed.
2069
2070@item :stop @var{stopped}
2071Start the network connection or server in the `stopped' state if
2072@var{stopped} is non-@code{nil}.
2073
2074@item :buffer @var{buffer}
2075Use @var{buffer} as the process buffer.
2076
2077@item :coding @var{coding}
2078Use @var{coding} as the coding system for this process. To specify
2079different coding systems for decoding data from the connection and for
2080encoding data sent to it, specify @code{(@var{decoding} .
2081@var{encoding})} for @var{coding}.
2082
2083If you don't specify this keyword at all, the default
2084is to determine the coding systems from the data.
2085
2086@item :noquery @var{query-flag}
2087Initialize the process query flag to @var{query-flag}.
2088@xref{Query Before Exit}.
2089
2090@item :filter @var{filter}
2091Initialize the process filter to @var{filter}.
2092
2093@item :filter-multibyte @var{bool}
2094If @var{bool} is non-@code{nil}, strings given to the process filter
2095are multibyte, otherwise they are unibyte. If you don't specify this
2096keyword at all, the default is that the strings are multibyte if
2097@code{default-enable-multibyte-characters} is non-@code{nil}.
2098
2099@item :sentinel @var{sentinel}
2100Initialize the process sentinel to @var{sentinel}.
2101
2102@item :log @var{log}
2103Initialize the log function of a server process to @var{log}. The log
2104function is called each time the server accepts a network connection
2105from a client. The arguments passed to the log function are
2106@var{server}, @var{connection}, and @var{message}, where @var{server}
2107is the server process, @var{connection} is the new process for the
2108connection, and @var{message} is a string describing what has
2109happened.
2110
2111@item :plist @var{plist}
2112Initialize the process plist to @var{plist}.
2113@end table
2114
2115The original argument list, modified with the actual connection
2116information, is available via the @code{process-contact} function.
2117@end defun
2118
2119@node Network Options
2120@subsection Network Options
2121
2122 The following network options can be specified when you create a
2123network process. Except for @code{:reuseaddr}, you can also set or
2124modify these options later, using @code{set-network-process-option}.
2125
2126 For a server process, the options specified with
2127@code{make-network-process} are not inherited by the client
2128connections, so you will need to set the necessary options for each
2129child connection as it is created.
2130
2131@table @asis
2132@item :bindtodevice @var{device-name}
2133If @var{device-name} is a non-empty string identifying a network
2134interface name (see @code{network-interface-list}), only handle
2135packets received on that interface. If @var{device-name} is @code{nil}
2136(the default), handle packets received on any interface.
2137
2138Using this option may require special privileges on some systems.
2139
2140@item :broadcast @var{broadcast-flag}
2141If @var{broadcast-flag} is non-@code{nil} for a datagram process, the
2142process will receive datagram packet sent to a broadcast address, and
2143be able to send packets to a broadcast address. Ignored for a stream
2144connection.
2145
2146@item :dontroute @var{dontroute-flag}
2147If @var{dontroute-flag} is non-@code{nil}, the process can only send
2148to hosts on the same network as the local host.
2149
2150@item :keepalive @var{keepalive-flag}
2151If @var{keepalive-flag} is non-@code{nil} for a stream connection,
2152enable exchange of low-level keep-alive messages.
2153
2154@item :linger @var{linger-arg}
2155If @var{linger-arg} is non-@code{nil}, wait for successful
2156transmission of all queued packets on the connection before it is
2157deleted (see @code{delete-process}). If @var{linger-arg} is an
2158integer, it specifies the maximum time in seconds to wait for queued
2159packets to be sent before closing the connection. Default is
2160@code{nil} which means to discard unsent queued packets when the
2161process is deleted.
2162
2163@item :oobinline @var{oobinline-flag}
2164If @var{oobinline-flag} is non-@code{nil} for a stream connection,
2165receive out-of-band data in the normal data stream. Otherwise, ignore
2166out-of-band data.
2167
2168@item :priority @var{priority}
2169Set the priority for packets sent on this connection to the integer
2170@var{priority}. The interpretation of this number is protocol
2171specific, such as setting the TOS (type of service) field on IP
2172packets sent on this connection. It may also have system dependent
2173effects, such as selecting a specific output queue on the network
2174interface.
2175
2176@item :reuseaddr @var{reuseaddr-flag}
2177If @var{reuseaddr-flag} is non-@code{nil} (the default) for a stream
2178server process, allow this server to reuse a specific port number (see
2179@code{:service}) unless another process on this host is already
2180listening on that port. If @var{reuseaddr-flag} is @code{nil}, there
2181may be a period of time after the last use of that port (by any
2182process on the host), where it is not possible to make a new server on
2183that port.
2184@end table
2185
2186@defun set-network-process-option process option value
2187This function sets or modifies a network option for network process
2188@var{process}. See @code{make-network-process} for details of options
2189@var{option} and their corresponding values @var{value}.
2190
2191The current setting of an option is available via the
2192@code{process-contact} function.
2193@end defun
2194
2195@node Network Feature Testing
2196@subsection Testing Availability of Network Features
2197
2198 To test for the availability of a given network feature, use
2199@code{featurep} like this:
2200
2201@example
2202(featurep 'make-network-process '(@var{keyword} @var{value}))
2203@end example
2204
2205@noindent
2206The result of the first form is @code{t} if it works to specify
2207@var{keyword} with value @var{value} in @code{make-network-process}.
2208The result of the second form is @code{t} if @var{keyword} is
2209supported by @code{make-network-process}. Here are some of the
2210@var{keyword}---@var{value} pairs you can test in
2211this way.
2212
2213@table @code
2214@item (:nowait t)
2215Non-@code{nil} if non-blocking connect is supported.
2216@item (:type datagram)
2217Non-@code{nil} if datagrams are supported.
2218@item (:family local)
2219Non-@code{nil} if local (a.k.a.@: ``UNIX domain'') sockets are supported.
2220@item (:family ipv6)
2221Non-@code{nil} if IPv6 is supported.
2222@item (:service t)
2223Non-@code{nil} if the system can select the port for a server.
2224@end table
2225
2226 To test for the availability of a given network option, use
2227@code{featurep} like this:
2228
2229@example
2230(featurep 'make-network-process '@var{keyword})
2231@end example
2232
2233@noindent
2234Here are some of the options you can test in this way.
2235
2236@table @code
2237@item :bindtodevice
2238@itemx :broadcast
2239@itemx :dontroute
2240@itemx :keepalive
2241@itemx :linger
2242@itemx :oobinline
2243@itemx :priority
2244@itemx :reuseaddr
2245That particular network option is supported by
2246@code{make-network-process} and @code{set-network-process-option}.
2247@end table
2248
2249@node Misc Network
2250@section Misc Network Facilities
2251
2252 These additional functions are useful for creating and operating
305a7ef2
EZ
2253on network connections. Note that they are supported only on some
2254systems.
b8d4c8d0
GM
2255
2256@defun network-interface-list
2257This function returns a list describing the network interfaces
2258of the machine you are using. The value is an alist whose
2259elements have the form @code{(@var{name} . @var{address})}.
2260@var{address} has the same form as the @var{local-address}
2261and @var{remote-address} arguments to @code{make-network-process}.
2262@end defun
2263
2264@defun network-interface-info ifname
2265This function returns information about the network interface named
2266@var{ifname}. The value is a list of the form
2267@code{(@var{addr} @var{bcast} @var{netmask} @var{hwaddr} @var{flags})}.
2268
2269@table @var
2270@item addr
2271The Internet protocol address.
2272@item bcast
2273The broadcast address.
2274@item netmask
2275The network mask.
2276@item hwaddr
2277The layer 2 address (Ethernet MAC address, for instance).
2278@item flags
2279The current flags of the interface.
2280@end table
2281@end defun
2282
2283@defun format-network-address address &optional omit-port
2284This function converts the Lisp representation of a network address to
2285a string.
2286
2287A five-element vector @code{[@var{a} @var{b} @var{c} @var{d} @var{p}]}
2288represents an IPv4 address @var{a}.@var{b}.@var{c}.@var{d} and port
2289number @var{p}. @code{format-network-address} converts that to the
2290string @code{"@var{a}.@var{b}.@var{c}.@var{d}:@var{p}"}.
2291
2292A nine-element vector @code{[@var{a} @var{b} @var{c} @var{d} @var{e}
2293@var{f} @var{g} @var{h} @var{p}]} represents an IPv6 address along
2294with a port number. @code{format-network-address} converts that to
2295the string
2296@code{"[@var{a}:@var{b}:@var{c}:@var{d}:@var{e}:@var{f}:@var{g}:@var{h}]:@var{p}"}.
2297
2298If the vector does not include the port number, @var{p}, or if
2299@var{omit-port} is non-@code{nil}, the result does not include the
2300@code{:@var{p}} suffix.
2301@end defun
2302
c73e02fa
GM
2303@node Serial Ports
2304@section Communicating with Serial Ports
2305@cindex @file{/dev/tty}
2306@cindex @file{COM1}
2307
2308 Emacs can communicate with serial ports. For interactive use,
2309@kbd{M-x serial-term} opens a terminal window. In a Lisp program,
2310@code{make-serial-process} creates a process object.
2311
2312 The serial port can be configured at run-time, without having to
2313close and re-open it. The function @code{serial-process-configure}
2314lets you change the speed, bytesize, and other parameters. In a
2315terminal window created by @code{serial-term}, you can click on the
2316mode line for configuration.
2317
2318 A serial connection is represented by a process object which can be
2319used similar to a subprocess or network process. You can send and
2320receive data and configure the serial port. A serial process object
2321has no process ID, and you can't send signals to it.
2322@code{delete-process} on the process object or @code{kill-buffer} on
2323the process buffer close the connection, but this does not affect the
2324device connected to the serial port.
2325
2326 The function @code{process-type} returns the symbol @code{serial}
2327for a process object representing a serial port.
2328
2329 Serial ports are available on GNU/Linux, Unix, and Windows systems.
2330
2331@defun serial-term port speed
2332Start a terminal-emulator for a serial port in a new buffer.
2333@var{port} is the path or name of the serial port. For example, this
2334could be @file{/dev/ttyS0} on Unix. On Windows, this could be
2335@file{COM1}, or @file{\\.\COM10} (double the backslashes in strings).
2336
2337@var{speed} is the speed of the serial port in bits per second. 9600
2338is a common value. The buffer is in Term mode; see @code{term-mode}
2339for the commands to use in that buffer. You can change the speed and
2340the configuration in the mode line menu. @end defun
2341
2342@defun make-serial-process &rest args
2343@code{make-serial-process} creates a process and a buffer. Arguments
2344are specified as keyword/argument pairs. The following arguments are
2345defined:
2346
2347@table @code
2348@item :port port
2349@var{port} (mandatory) is the path or name of the serial port.
2350For example, this could be @file{/dev/ttyS0} on Unix. On Windows,
2351this could be @file{COM1}, or @file{\\.\COM10} for ports higher than
2352@file{COM9} (double the backslashes in strings).
2353
2354@item :speed speed
2355@var{speed} (mandatory) is handled by @code{serial-process-configure},
2356which is called by @code{make-serial-process}.
2357
2358@item :name name
2359@var{name} is the name of the process. If @var{name} is not given, the
2360value of @var{port} is used.
2361
2362@item :buffer buffer
2363@var{buffer} is the buffer (or buffer-name) to associate with the
2364process. Process output goes at the end of that buffer, unless you
2365specify an output stream or filter function to handle the output. If
2366@var{buffer} is not given, the value of @var{name} is used.
2367
2368@item :coding coding
2369If @var{coding} is a symbol, it specifies the coding system used for
2370both reading and writing for this process. If @var{coding} is a cons
2371@code{(decoding . encoding)}, @var{decoding} is used for reading, and
2372@var{encoding} is used for writing.
2373
2374@item :noquery bool
2375When exiting Emacs, query the user if @var{bool} is @code{nil} and the
2376process is running. If @var{bool} is not given, query before exiting.
2377
2378@item :stop bool
2379Start process in the @code{stopped} state if @var{bool} is
2380non-@code{nil}. In the stopped state, a serial process does not
2381accept incoming data, but you can send outgoing data. The stopped
2382state is cleared by @code{continue-process} and set by
2383@code{stop-process}.
2384
2385@item :filter filter
2386Install @var{filter} as the process filter.
2387
2388@item :sentinel sentinel
2389Install @var{sentinel} as the process sentinel.
2390
2391@item :plist plist
2392Install @var{plist} as the initial plist of the process.
2393
2394@item :speed
2395@itemx :bytesize
2396@itemx :parity
2397@itemx :stopbits
2398@itemx :flowcontrol
2399These arguments are handled by @code{serial-process-configure}, which
2400is called by @code{make-serial-process}.
2401@end table
2402
2403The original argument list, possibly modified by later configuration,
2404is available via the function @code{process-contact}.
2405
2406Examples:
2407
2408@example
2409(make-serial-process :port "/dev/ttyS0" :speed 9600)
2410
2411(make-serial-process :port "COM1" :speed 115200 :stopbits 2)
2412
2413(make-serial-process :port "\\\\.\\COM13" :speed 1200 :bytesize 7 :parity 'odd)
2414
2415(make-serial-process :port "/dev/tty.BlueConsole-SPP-1" :speed nil)
2416@end example
2417@end defun
2418
2419@defun serial-process-configure &rest args
2420@cindex baud
2421@cindex bytesize
2422@cindex parity
2423@cindex stopbits
2424@cindex flowcontrol
2425
2426Configure a serial port. Arguments are specified as keyword/argument
2427pairs. Attributes that are not given are re-initialized from the
2428process's current configuration (available via the function
2429@code{process-contact}) or set to reasonable default values. The
2430following arguments are defined:
2431
2432@table @code
2433@item :process process
2434@itemx :name name
2435@itemx :buffer buffer
2436@itemx :port port
2437Any of these arguments can be given to identify the process that is to
2438be configured. If none of these arguments is given, the current
2439buffer's process is used.
2440
2441@item :speed @var{speed}
2442@var{speed} is the speed of the serial port in bits per second, also
2443called baud rate. Any value can be given for @var{speed}, but most
2444serial ports work only at a few defined values between 1200 and
2445115200, with 9600 being the most common value. If @var{speed} is
2446@code{nil}, the serial port is not configured any further, i.e., all
2447other arguments are ignored. This may be useful for special serial
2448ports such as Bluetooth-to-serial converters which can only be
2449configured through AT commands. A value of @code{nil} for @var{speed}
2450can be used only when passed through @code{make-serial-process} or
2451@code{serial-term}.
2452
2453@item :bytesize @var{bytesize}
2454@var{bytesize} is the number of bits per byte, which can be 7 or 8.
2455If @var{bytesize} is not given or @code{nil}, a value of 8 is used.
2456
2457@item :parity @var{parity}
2458@var{parity} can be @code{nil} (don't use parity), the symbol
2459@code{odd} (use odd parity), or the symbol @code{even} (use even
2460parity). If @var{parity} is not given, no parity is used.
2461
2462@item :stopbits @var{stopbits}
2463@var{stopbits} is the number of stopbits used to terminate a byte
2464transmission. @var{stopbits} can be 1 or 2. If @var{stopbits} is not
2465given or @code{nil}, 1 stopbit is used.
2466
2467@item :flowcontrol @var{flowcontrol}
2468@var{flowcontrol} determines the type of flowcontrol to be used, which
2469is either @code{nil} (don't use flowcontrol), the symbol @code{hw}
2470(use RTS/CTS hardware flowcontrol), or the symbol @code{sw} (use
2471XON/XOFF software flowcontrol). If @var{flowcontrol} is not given, no
2472flowcontrol is used.
2473@end table
2474
2475@code{serial-process-configure} is called by @code{make-serial-process} for the
2476initial configuration of the serial port.
2477
2478Examples:
2479
2480@example
2481(serial-process-configure :process "/dev/ttyS0" :speed 1200)
2482
2483(serial-process-configure :buffer "COM1" :stopbits 1 :parity 'odd :flowcontrol 'hw)
2484
2485(serial-process-configure :port "\\\\.\\COM13" :bytesize 7)
2486@end example
2487@end defun
2488
b8d4c8d0
GM
2489@node Byte Packing
2490@section Packing and Unpacking Byte Arrays
2491@cindex byte packing and unpacking
2492
2493 This section describes how to pack and unpack arrays of bytes,
2494usually for binary network protocols. These functions convert byte arrays
2495to alists, and vice versa. The byte array can be represented as a
2496unibyte string or as a vector of integers, while the alist associates
2497symbols either with fixed-size objects or with recursive sub-alists.
2498
2499@cindex serializing
2500@cindex deserializing
2501@cindex packing
2502@cindex unpacking
2503 Conversion from byte arrays to nested alists is also known as
2504@dfn{deserializing} or @dfn{unpacking}, while going in the opposite
2505direction is also known as @dfn{serializing} or @dfn{packing}.
2506
2507@menu
2508* Bindat Spec:: Describing data layout.
2509* Bindat Functions:: Doing the unpacking and packing.
2510* Bindat Examples:: Samples of what bindat.el can do for you!
2511@end menu
2512
2513@node Bindat Spec
2514@subsection Describing Data Layout
2515
2516 To control unpacking and packing, you write a @dfn{data layout
2517specification}, a special nested list describing named and typed
2518@dfn{fields}. This specification controls length of each field to be
2519processed, and how to pack or unpack it. We normally keep bindat specs
2520in variables whose names end in @samp{-bindat-spec}; that kind of name
2521is automatically recognized as ``risky.''
2522
2523@cindex endianness
2524@cindex big endian
2525@cindex little endian
2526@cindex network byte ordering
2527 A field's @dfn{type} describes the size (in bytes) of the object
2528that the field represents and, in the case of multibyte fields, how
2529the bytes are ordered within the field. The two possible orderings
2530are ``big endian'' (also known as ``network byte ordering'') and
2531``little endian.'' For instance, the number @code{#x23cd} (decimal
25329165) in big endian would be the two bytes @code{#x23} @code{#xcd};
2533and in little endian, @code{#xcd} @code{#x23}. Here are the possible
2534type values:
2535
2536@table @code
2537@item u8
2538@itemx byte
2539Unsigned byte, with length 1.
2540
2541@item u16
2542@itemx word
2543@itemx short
2544Unsigned integer in network byte order, with length 2.
2545
2546@item u24
2547Unsigned integer in network byte order, with length 3.
2548
2549@item u32
2550@itemx dword
2551@itemx long
2552Unsigned integer in network byte order, with length 4.
2553Note: These values may be limited by Emacs' integer implementation limits.
2554
2555@item u16r
2556@itemx u24r
2557@itemx u32r
2558Unsigned integer in little endian order, with length 2, 3 and 4, respectively.
2559
2560@item str @var{len}
2561String of length @var{len}.
2562
2563@item strz @var{len}
2564Zero-terminated string, in a fixed-size field with length @var{len}.
2565
2566@item vec @var{len} [@var{type}]
2567Vector of @var{len} elements of type @var{type}, or bytes if not
2568@var{type} is specified.
2569The @var{type} is any of the simple types above, or another vector
2570specified as a list @code{(vec @var{len} [@var{type}])}.
2571
2572@item ip
2573Four-byte vector representing an Internet address. For example:
2574@code{[127 0 0 1]} for localhost.
2575
2576@item bits @var{len}
2577List of set bits in @var{len} bytes. The bytes are taken in big
2578endian order and the bits are numbered starting with @code{8 *
2579@var{len} @minus{} 1} and ending with zero. For example: @code{bits
25802} unpacks @code{#x28} @code{#x1c} to @code{(2 3 4 11 13)} and
2581@code{#x1c} @code{#x28} to @code{(3 5 10 11 12)}.
2582
2583@item (eval @var{form})
2584@var{form} is a Lisp expression evaluated at the moment the field is
2585unpacked or packed. The result of the evaluation should be one of the
2586above-listed type specifications.
2587@end table
2588
2589For a fixed-size field, the length @var{len} is given as an integer
2590specifying the number of bytes in the field.
2591
2592When the length of a field is not fixed, it typically depends on the
2593value of a preceding field. In this case, the length @var{len} can be
2594given either as a list @code{(@var{name} ...)} identifying a
2595@dfn{field name} in the format specified for @code{bindat-get-field}
2596below, or by an expression @code{(eval @var{form})} where @var{form}
2597should evaluate to an integer, specifying the field length.
2598
2599A field specification generally has the form @code{([@var{name}]
2600@var{handler})}. The square braces indicate that @var{name} is
2601optional. (Don't use names that are symbols meaningful as type
2602specifications (above) or handler specifications (below), since that
2603would be ambiguous.) @var{name} can be a symbol or the expression
2604@code{(eval @var{form})}, in which case @var{form} should evaluate to
2605a symbol.
2606
2607@var{handler} describes how to unpack or pack the field and can be one
2608of the following:
2609
2610@table @code
2611@item @var{type}
2612Unpack/pack this field according to the type specification @var{type}.
2613
2614@item eval @var{form}
2615Evaluate @var{form}, a Lisp expression, for side-effect only. If the
2616field name is specified, the value is bound to that field name.
2617
2618@item fill @var{len}
2619Skip @var{len} bytes. In packing, this leaves them unchanged,
2620which normally means they remain zero. In unpacking, this means
2621they are ignored.
2622
2623@item align @var{len}
2624Skip to the next multiple of @var{len} bytes.
2625
2626@item struct @var{spec-name}
2627Process @var{spec-name} as a sub-specification. This describes a
2628structure nested within another structure.
2629
2630@item union @var{form} (@var{tag} @var{spec})@dots{}
2631@c ??? I don't see how one would actually use this.
2632@c ??? what kind of expression would be useful for @var{form}?
2633Evaluate @var{form}, a Lisp expression, find the first @var{tag}
2634that matches it, and process its associated data layout specification
2635@var{spec}. Matching can occur in one of three ways:
2636
2637@itemize
2638@item
2639If a @var{tag} has the form @code{(eval @var{expr})}, evaluate
2640@var{expr} with the variable @code{tag} dynamically bound to the value
2641of @var{form}. A non-@code{nil} result indicates a match.
2642
2643@item
2644@var{tag} matches if it is @code{equal} to the value of @var{form}.
2645
2646@item
2647@var{tag} matches unconditionally if it is @code{t}.
2648@end itemize
2649
2650@item repeat @var{count} @var{field-specs}@dots{}
2651Process the @var{field-specs} recursively, in order, then repeat
2652starting from the first one, processing all the specs @var{count}
2653times overall. The @var{count} is given using the same formats as a
2654field length---if an @code{eval} form is used, it is evaluated just once.
2655For correct operation, each spec in @var{field-specs} must include a name.
2656@end table
2657
2658For the @code{(eval @var{form})} forms used in a bindat specification,
2659the @var{form} can access and update these dynamically bound variables
2660during evaluation:
2661
2662@table @code
2663@item last
2664Value of the last field processed.
2665
2666@item bindat-raw
2667The data as a byte array.
2668
2669@item bindat-idx
2670Current index (within @code{bindat-raw}) for unpacking or packing.
2671
2672@item struct
2673The alist containing the structured data that have been unpacked so
2674far, or the entire structure being packed. You can use
2675@code{bindat-get-field} to access specific fields of this structure.
2676
2677@item count
2678@itemx index
2679Inside a @code{repeat} block, these contain the maximum number of
2680repetitions (as specified by the @var{count} parameter), and the
2681current repetition number (counting from 0). Setting @code{count} to
2682zero will terminate the inner-most repeat block after the current
2683repetition has completed.
2684@end table
2685
2686@node Bindat Functions
2687@subsection Functions to Unpack and Pack Bytes
2688
2689 In the following documentation, @var{spec} refers to a data layout
2690specification, @code{bindat-raw} to a byte array, and @var{struct} to an
2691alist representing unpacked field data.
2692
2693@defun bindat-unpack spec bindat-raw &optional bindat-idx
2694This function unpacks data from the unibyte string or byte
2695array @code{bindat-raw}
2696according to @var{spec}. Normally this starts unpacking at the
2697beginning of the byte array, but if @var{bindat-idx} is non-@code{nil}, it
2698specifies a zero-based starting position to use instead.
2699
2700The value is an alist or nested alist in which each element describes
2701one unpacked field.
2702@end defun
2703
2704@defun bindat-get-field struct &rest name
2705This function selects a field's data from the nested alist
2706@var{struct}. Usually @var{struct} was returned by
2707@code{bindat-unpack}. If @var{name} corresponds to just one argument,
2708that means to extract a top-level field value. Multiple @var{name}
2709arguments specify repeated lookup of sub-structures. An integer name
2710acts as an array index.
2711
2712For example, if @var{name} is @code{(a b 2 c)}, that means to find
2713field @code{c} in the third element of subfield @code{b} of field
2714@code{a}. (This corresponds to @code{struct.a.b[2].c} in C.)
2715@end defun
2716
2717 Although packing and unpacking operations change the organization of
2718data (in memory), they preserve the data's @dfn{total length}, which is
2719the sum of all the fields' lengths, in bytes. This value is not
2720generally inherent in either the specification or alist alone; instead,
2721both pieces of information contribute to its calculation. Likewise, the
2722length of a string or array being unpacked may be longer than the data's
2723total length as described by the specification.
2724
2725@defun bindat-length spec struct
2726This function returns the total length of the data in @var{struct},
2727according to @var{spec}.
2728@end defun
2729
2730@defun bindat-pack spec struct &optional bindat-raw bindat-idx
2731This function returns a byte array packed according to @var{spec} from
2732the data in the alist @var{struct}. Normally it creates and fills a
2733new byte array starting at the beginning. However, if @var{bindat-raw}
2734is non-@code{nil}, it specifies a pre-allocated unibyte string or vector to
2735pack into. If @var{bindat-idx} is non-@code{nil}, it specifies the starting
2736offset for packing into @code{bindat-raw}.
2737
2738When pre-allocating, you should make sure @code{(length @var{bindat-raw})}
2739meets or exceeds the total length to avoid an out-of-range error.
2740@end defun
2741
2742@defun bindat-ip-to-string ip
2743Convert the Internet address vector @var{ip} to a string in the usual
2744dotted notation.
2745
2746@example
2747(bindat-ip-to-string [127 0 0 1])
2748 @result{} "127.0.0.1"
2749@end example
2750@end defun
2751
2752@node Bindat Examples
2753@subsection Examples of Byte Unpacking and Packing
2754
2755 Here is a complete example of byte unpacking and packing:
2756
2757@lisp
2758(defvar fcookie-index-spec
2759 '((:version u32)
2760 (:count u32)
2761 (:longest u32)
2762 (:shortest u32)
2763 (:flags u32)
2764 (:delim u8)
2765 (:ignored fill 3)
2766 (:offset repeat (:count)
2767 (:foo u32)))
2768 "Description of a fortune cookie index file's contents.")
2769
2770(defun fcookie (cookies &optional index)
2771 "Display a random fortune cookie from file COOKIES.
2772Optional second arg INDEX specifies the associated index
2773filename, which is by default constructed by appending
2774\".dat\" to COOKIES. Display cookie text in possibly
2775new buffer \"*Fortune Cookie: BASENAME*\" where BASENAME
2776is COOKIES without the directory part."
2777 (interactive "fCookies file: ")
2778 (let* ((info (with-temp-buffer
2779 (insert-file-contents-literally
2780 (or index (concat cookies ".dat")))
2781 (bindat-unpack fcookie-index-spec
2782 (buffer-string))))
2783 (sel (random (bindat-get-field info :count)))
2784 (beg (cdar (bindat-get-field info :offset sel)))
2785 (end (or (cdar (bindat-get-field info
2786 :offset (1+ sel)))
2787 (nth 7 (file-attributes cookies)))))
2788 (switch-to-buffer
2789 (get-buffer-create
2790 (format "*Fortune Cookie: %s*"
2791 (file-name-nondirectory cookies))))
2792 (erase-buffer)
2793 (insert-file-contents-literally
2794 cookies nil beg (- end 3))))
2795
2796(defun fcookie-create-index (cookies &optional index delim)
2797 "Scan file COOKIES, and write out its index file.
2798Optional second arg INDEX specifies the index filename,
2799which is by default constructed by appending \".dat\" to
2800COOKIES. Optional third arg DELIM specifies the unibyte
2801character which, when found on a line of its own in
2802COOKIES, indicates the border between entries."
2803 (interactive "fCookies file: ")
2804 (setq delim (or delim ?%))
2805 (let ((delim-line (format "\n%c\n" delim))
2806 (count 0)
2807 (max 0)
2808 min p q len offsets)
2809 (unless (= 3 (string-bytes delim-line))
2810 (error "Delimiter cannot be represented in one byte"))
2811 (with-temp-buffer
2812 (insert-file-contents-literally cookies)
2813 (while (and (setq p (point))
2814 (search-forward delim-line (point-max) t)
2815 (setq len (- (point) 3 p)))
2816 (setq count (1+ count)
2817 max (max max len)
2818 min (min (or min max) len)
2819 offsets (cons (1- p) offsets))))
2820 (with-temp-buffer
2821 (set-buffer-multibyte nil)
2822 (insert
2823 (bindat-pack
2824 fcookie-index-spec
2825 `((:version . 2)
2826 (:count . ,count)
2827 (:longest . ,max)
2828 (:shortest . ,min)
2829 (:flags . 0)
2830 (:delim . ,delim)
2831 (:offset . ,(mapcar (lambda (o)
2832 (list (cons :foo o)))
2833 (nreverse offsets))))))
2834 (let ((coding-system-for-write 'raw-text-unix))
2835 (write-file (or index (concat cookies ".dat")))))))
2836@end lisp
2837
2838Following is an example of defining and unpacking a complex structure.
2839Consider the following C structures:
2840
2841@example
2842struct header @{
2843 unsigned long dest_ip;
2844 unsigned long src_ip;
2845 unsigned short dest_port;
2846 unsigned short src_port;
2847@};
2848
2849struct data @{
2850 unsigned char type;
2851 unsigned char opcode;
2852 unsigned short length; /* In network byte order */
2853 unsigned char id[8]; /* null-terminated string */
2854 unsigned char data[/* (length + 3) & ~3 */];
2855@};
2856
2857struct packet @{
2858 struct header header;
2859 unsigned long counters[2]; /* In little endian order */
2860 unsigned char items;
2861 unsigned char filler[3];
2862 struct data item[/* items */];
2863
2864@};
2865@end example
2866
2867The corresponding data layout specification:
2868
2869@lisp
2870(setq header-spec
2871 '((dest-ip ip)
2872 (src-ip ip)
2873 (dest-port u16)
2874 (src-port u16)))
2875
2876(setq data-spec
2877 '((type u8)
2878 (opcode u8)
2879 (length u16) ;; network byte order
2880 (id strz 8)
2881 (data vec (length))
2882 (align 4)))
2883
2884(setq packet-spec
2885 '((header struct header-spec)
2886 (counters vec 2 u32r) ;; little endian order
2887 (items u8)
2888 (fill 3)
2889 (item repeat (items)
2890 (struct data-spec))))
2891@end lisp
2892
2893A binary data representation:
2894
2895@lisp
2896(setq binary-data
2897 [ 192 168 1 100 192 168 1 101 01 28 21 32
2898 160 134 1 0 5 1 0 0 2 0 0 0
2899 2 3 0 5 ?A ?B ?C ?D ?E ?F 0 0 1 2 3 4 5 0 0 0
2900 1 4 0 7 ?B ?C ?D ?E ?F ?G 0 0 6 7 8 9 10 11 12 0 ])
2901@end lisp
2902
2903The corresponding decoded structure:
2904
2905@lisp
2906(setq decoded (bindat-unpack packet-spec binary-data))
2907 @result{}
2908((header
2909 (dest-ip . [192 168 1 100])
2910 (src-ip . [192 168 1 101])
2911 (dest-port . 284)
2912 (src-port . 5408))
2913 (counters . [100000 261])
2914 (items . 2)
2915 (item ((data . [1 2 3 4 5])
2916 (id . "ABCDEF")
2917 (length . 5)
2918 (opcode . 3)
2919 (type . 2))
2920 ((data . [6 7 8 9 10 11 12])
2921 (id . "BCDEFG")
2922 (length . 7)
2923 (opcode . 4)
2924 (type . 1))))
2925@end lisp
2926
2927Fetching data from this structure:
2928
2929@lisp
2930(bindat-get-field decoded 'item 1 'id)
2931 @result{} "BCDEFG"
2932@end lisp
2933
2934@ignore
2935 arch-tag: ba9da253-e65f-4e7f-b727-08fba0a1df7a
2936@end ignore