@node Shell Arguments
@section Shell Arguments
+@cindex arguments for shell commands
+@cindex shell command arguments
Lisp programs sometimes need to run a shell and give it a command
that contains file names that were specified by the user. These
@var{infile} is on another remote host. Or @code{default-directory}
could be non-special, whereas @var{infile} is on a remote host.)
-If @var{buffer} has the form @code{(@var{real-destination}
+If @var{buffer} is a list of the form @code{(@var{real-destination}
@var{error-destination})}, and @var{error-destination} names a file,
then the same remarks as for @var{infile} apply.
@node Decoding Output
@subsection Decoding Process Output
+@cindex decode process output
When Emacs writes process output directly into a multibyte buffer,
it decodes the output according to the process output coding system.
@node Accepting Output
@subsection Accepting Output from Processes
+@cindex accept input from processes
Output from asynchronous subprocesses normally arrives only while
Emacs is waiting for some sort of external event, such as elapsed time
periods. The former specifies a period measured in seconds and the
latter specifies one measured in milliseconds. The two time periods
thus specified are added together, and @code{accept-process-output}
-returns after that much time whether or not there has been any
+returns after that much time, whether or not there has been any
subprocess output.
-
-The argument @var{seconds} need not be an integer. If it is a floating
-point number, this function waits for a fractional number of seconds.
-If @var{seconds} is 0, the function accepts whatever output is
-pending but does not wait.
+
+The argument @var{millisec} is semi-obsolete nowadays because
+@var{seconds} can be a floating point number to specify waiting a
+fractional number of seconds. If @var{seconds} is 0, the function
+accepts whatever output is pending but does not wait.
@c Emacs 22.1 feature
If @var{process} is a process, and the argument @var{just-this-one} is
@node Sentinels
@section Sentinels: Detecting Process Status Changes
@cindex process sentinel
-@cindex sentinel
+@cindex sentinel (of process)
A @dfn{process sentinel} is a function that is called whenever the
associated process changes status for any reason, including signals
@item :sentinel
The associated value is the process sentinel function.
@item :remote
-In a connection, this is the address in internal format of the remote peer.
+In a connection, the address in internal format of the remote peer.
@item :local
The local address, in internal format.
@item :service
@node Network Servers
@section Network Servers
+@cindex network servers
You create a server by calling @code{make-network-process} with
@code{:server t}. The server will listen for connection requests from
@section Low-Level Network Access
You can also create network connections by operating at a lower
-level that that of @code{open-network-stream}, using
+level than that of @code{open-network-stream}, using
@code{make-network-process}.
@menu
@section Misc Network Facilities
These additional functions are useful for creating and operating
-on network connections.
+on network connections. Note that they are supported only on some
+systems.
@defun network-interface-list
This function returns a list describing the network interfaces
string @code{"@var{a}.@var{b}.@var{c}.@var{d}:@var{p}"}.
A nine-element vector @code{[@var{a} @var{b} @var{c} @var{d} @var{e}
-@var{f} @var{g} @var{h} @var{p}]} represents an IPv6 address and port
-number. @code{format-network-address} converts that to the string
+@var{f} @var{g} @var{h} @var{p}]} represents an IPv6 address along
+with a port number. @code{format-network-address} converts that to
+the string
@code{"[@var{a}:@var{b}:@var{c}:@var{d}:@var{e}:@var{f}:@var{g}:@var{h}]:@var{p}"}.
If the vector does not include the port number, @var{p}, or if
@node Byte Packing
@section Packing and Unpacking Byte Arrays
+@cindex byte packing and unpacking
This section describes how to pack and unpack arrays of bytes,
usually for binary network protocols. These functions convert byte arrays
@item strz @var{len}
Zero-terminated string, in a fixed-size field with length @var{len}.
-@item vec @var{len}
-Vector of @var{len} bytes.
+@item vec @var{len} [@var{type}]
+Vector of @var{len} elements of type @var{type}, or bytes if not
+@var{type} is specified.
+The @var{type} is any of the simple types above, or another vector
+specified as a list @code{(vec @var{len} [@var{type}])}.
@item ip
Four-byte vector representing an Internet address. For example:
struct data @{
unsigned char type;
unsigned char opcode;
- unsigned long length; /* In little endian order */
+ unsigned short length; /* In network byte order */
unsigned char id[8]; /* null-terminated string */
unsigned char data[/* (length + 3) & ~3 */];
@};
struct packet @{
struct header header;
+ unsigned long counters[2]; /* In little endian order */
unsigned char items;
unsigned char filler[3];
struct data item[/* items */];
(setq data-spec
'((type u8)
(opcode u8)
- (length u16r) ;; little endian order
+ (length u16) ;; network byte order
(id strz 8)
(data vec (length))
(align 4)))
(setq packet-spec
'((header struct header-spec)
+ (counters vec 2 u32r) ;; little endian order
(items u8)
(fill 3)
(item repeat (items)
@lisp
(setq binary-data
- [ 192 168 1 100 192 168 1 101 01 28 21 32 2 0 0 0
- 2 3 5 0 ?A ?B ?C ?D ?E ?F 0 0 1 2 3 4 5 0 0 0
- 1 4 7 0 ?B ?C ?D ?E ?F ?G 0 0 6 7 8 9 10 11 12 0 ])
+ [ 192 168 1 100 192 168 1 101 01 28 21 32
+ 160 134 1 0 5 1 0 0 2 0 0 0
+ 2 3 0 5 ?A ?B ?C ?D ?E ?F 0 0 1 2 3 4 5 0 0 0
+ 1 4 0 7 ?B ?C ?D ?E ?F ?G 0 0 6 7 8 9 10 11 12 0 ])
@end lisp
The corresponding decoded structure:
(src-ip . [192 168 1 101])
(dest-port . 284)
(src-port . 5408))
+ (counters . [100000 261])
(items . 2)
(item ((data . [1 2 3 4 5])
(id . "ABCDEF")