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