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