mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			260 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			260 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| COMMENT(!MOD!zsh/system
 | |
| A builtin interface to various low-level system features.
 | |
| !MOD!)
 | |
| The tt(zsh/system) module makes available various builtin commands and
 | |
| parameters.
 | |
| 
 | |
| subsect(Builtins)
 | |
| 
 | |
| startitem()
 | |
| findex(syserror)
 | |
| item(tt(syserror) [ tt(-e) var(errvar) ] [ tt(-p) var(prefix) ] [ var(errno) | var(errname) ])(
 | |
| This command prints out the error message associated with var(errno), a
 | |
| system error number, followed by a newline to standard error.
 | |
| 
 | |
| Instead of the error number, a name var(errname), for example
 | |
| tt(ENOENT), may be used.  The set of names is the same as the contents
 | |
| of the array tt(errnos), see below.
 | |
| 
 | |
| If the string var(prefix) is given, it is printed in front of the error
 | |
| message, with no intervening space.
 | |
| 
 | |
| If var(errvar) is supplied, the entire message, without a newline, is
 | |
| assigned to the parameter names var(errvar) and nothing is output.
 | |
| 
 | |
| A return status of 0 indicates the message was successfully printed
 | |
| (although it may not be useful if the error number was out of the
 | |
| system's range), a return status of 1 indicates an error in the
 | |
| parameters, and a return status of 2 indicates the error name was
 | |
| not recognised (no message is printed for this).
 | |
| )
 | |
| findex(sysopen)
 | |
| redef(SPACES)(0)(tt(ifztexi(NOTRANS(@ @ @ @ @ @ @ @ ))ifnztexi(        )))
 | |
| xitem(tt(sysopen) [ tt(-arw) ] [ tt(-m) var(permissions) ] [ tt(-o) var(options) ])
 | |
| item(SPACES()tt(-u) var(fd) var(file))(
 | |
| This command opens a file. The tt(-r), tt(-w) and tt(-a) flags indicate
 | |
| whether the file should be opened for reading, writing and appending,
 | |
| respectively. The tt(-m) option allows the initial permissions to use when
 | |
| creating a file to be specified in octal form.  The file descriptor is
 | |
| specified with tt(-u). Either an explicit file descriptor in the range 0 to 9 can
 | |
| be specified or a variable name can be given to which the file descriptor
 | |
| number will be assigned.
 | |
| 
 | |
| The tt(-o) option allows various system specific options to be
 | |
| specified as a comma-separated list. The following is a list of possible
 | |
| options. Note that, depending on the system, some may not be available.
 | |
| startitem()
 | |
| item(tt(cloexec))(
 | |
| mark file to be closed when other programs are executed
 | |
| )
 | |
| xitem(tt(create))
 | |
| item(tt(creat))(
 | |
| create file if it does not exist
 | |
| )
 | |
| item(tt(excl))(
 | |
| create file, error if it already exists
 | |
| )
 | |
| item(tt(noatime))(
 | |
| suppress updating of the file atime
 | |
| )
 | |
| item(tt(nofollow))(
 | |
| fail if var(file) is a symbolic link
 | |
| )
 | |
| item(tt(sync))(
 | |
| request that writes wait until data has been physically written
 | |
| )
 | |
| xitem(tt(truncate))
 | |
| item(tt(trunc))(
 | |
| truncate file to size 0
 | |
| )
 | |
| enditem()
 | |
| 
 | |
| To close the file, use one of the following:
 | |
| 
 | |
| example(tt(exec {)var(fd)tt(}<&-)
 | |
| tt(exec {)var(fd)tt(}>&-))
 | |
| )
 | |
| findex(sysread)
 | |
| redef(SPACES)(0)(tt(ifztexi(NOTRANS(@ @ @ @ @ @ @ @ ))ifnztexi(        )))
 | |
| xitem(tt(sysread )[ tt(-c) var(countvar) ] [ tt(-i) var(infd) ] [ tt(-o) var(outfd) ])
 | |
| item(SPACES()[ tt(-s) var(bufsize) ] [ tt(-t) var(timeout) ] [ var(param) ])(
 | |
| Perform a single system read from file descriptor var(infd), or zero if
 | |
| that is not given.  The result of the read is stored in var(param) or
 | |
| tt(REPLY) if that is not given.  If var(countvar) is given, the number
 | |
| of bytes read is assigned to the parameter named by var(countvar).
 | |
| 
 | |
| The maximum number of bytes read is var(bufsize) or 8192 if that is not
 | |
| given, however the command returns as soon as any number of bytes was
 | |
| successfully read.
 | |
| 
 | |
| If var(timeout) is given, it specifies a timeout in seconds, which may
 | |
| be zero to poll the file descriptor.  This is handled by the tt(poll)
 | |
| system call if available, otherwise the tt(select) system call if
 | |
| available.
 | |
| 
 | |
| If var(outfd) is given, an attempt is made to write all the bytes just
 | |
| read to the file descriptor var(outfd).  If this fails, because of a
 | |
| system error other than tt(EINTR) or because of an internal zsh error
 | |
| during an interrupt, the bytes read but not written are stored in the
 | |
| parameter named by var(param) if supplied (no default is used in this
 | |
| case), and the number of bytes read but not written is stored in the
 | |
| parameter named by var(countvar) if that is supplied.  If it was
 | |
| successful, var(countvar) contains the full number of bytes transferred,
 | |
| as usual, and var(param) is not set.
 | |
| 
 | |
| The error tt(EINTR) (interrupted system call) is handled internally so
 | |
| that shell interrupts are transparent to the caller.  Any other error
 | |
| causes a return.
 | |
| 
 | |
| The possible return statuses are
 | |
| startitem()
 | |
| item(0)(
 | |
| At least one byte of data was successfully read and, if appropriate,
 | |
| written.
 | |
| )
 | |
| item(1)(
 | |
| There was an error in the parameters to the command.  This is the only
 | |
| error for which a message is printed to standard error.
 | |
| )
 | |
| item(2)(
 | |
| There was an error on the read, or on polling the input file descriptor
 | |
| for a timeout.  The parameter tt(ERRNO) gives the error.
 | |
| )
 | |
| item(3)(
 | |
| Data were successfully read, but there was an error writing them
 | |
| to var(outfd).  The parameter tt(ERRNO) gives the error.
 | |
| )
 | |
| item(4)(
 | |
| The attempt to read timed out.  Note this does not set tt(ERRNO) as this
 | |
| is not a system error.
 | |
| )
 | |
| item(5)(
 | |
| No system error occurred, but zero bytes were read.  This usually
 | |
| indicates end of file.  The parameters are set according to the
 | |
| usual rules; no write to var(outfd) is attempted.
 | |
| )
 | |
| enditem()
 | |
| )
 | |
| item(tt(sysseek) [ tt(-u) var(fd) ] [ tt(-w) tt(start)|tt(end)|tt(current) ] var(offset))(
 | |
| The current file position at which future reads and writes will take place is
 | |
| adjusted to the specified byte offset. The var(offset) is evaluated as a math
 | |
| expression. The tt(-u) option allows the file descriptor to be specified. By
 | |
| default the offset is specified relative to the start or the file but, with the
 | |
| tt(-w) option, it is possible to specify that the offset should be relative to
 | |
| the current position or the end of the file.
 | |
| )
 | |
| item(tt(syswrite) [ tt(-c) var(countvar) ] [ tt(-o) var(outfd) ] var(data))(
 | |
| The data (a single string of bytes) are written to the file descriptor
 | |
| var(outfd), or 1 if that is not given, using the tt(write) system call.
 | |
| Multiple write operations may be used if the first does not write all
 | |
| the data.
 | |
| 
 | |
| If var(countvar) is given, the number of byte written is stored in the
 | |
| parameter named by var(countvar); this may not be the full length of
 | |
| var(data) if an error occurred.
 | |
| 
 | |
| The error tt(EINTR) (interrupted system call) is handled internally by
 | |
| retrying; otherwise an error causes the command to return.  For example,
 | |
| if the file descriptor is set to non-blocking output, an error
 | |
| tt(EAGAIN) (on some systems, tt(EWOULDBLOCK)) may result in the command
 | |
| returning early.
 | |
| 
 | |
| The return status may be 0 for success, 1 for an error in the parameters
 | |
| to the command, or 2 for an error on the write; no error message is
 | |
| printed in the last case, but the parameter tt(ERRNO) will reflect
 | |
| the error that occurred.
 | |
| )
 | |
| xitem(tt(zsystem flock) [ tt(-t) var(timeout) ] [ tt(-f) var(var) ] [tt(-er)] var(file))
 | |
| item(tt(zsystem flock -u) var(fd_expr))(
 | |
| The builtin tt(zsystem)'s subcommand tt(flock) performs advisory file
 | |
| locking (via the manref(fcntl)(2) system call) over the entire contents
 | |
| of the given file.  This form of locking requires the processes
 | |
| accessing the file to cooperate; its most obvious use is between two
 | |
| instances of the shell itself.
 | |
| 
 | |
| In the first form the named var(file), which must already exist, is
 | |
| locked by opening a file descriptor to the file and applying a lock to
 | |
| the file descriptor.  The lock terminates when the shell process that
 | |
| created the lock exits; it is therefore often convenient to create file
 | |
| locks within subshells, since the lock is automatically released when
 | |
| the subshell exits.  Status 0 is returned if the lock succeeds, else
 | |
| status 1.
 | |
| 
 | |
| In the second form the file descriptor given by the arithmetic
 | |
| expression var(fd_expr) is closed, releasing a lock.  The file descriptor
 | |
| can be queried by using the `tt(-f) var(var)' form during the lock;
 | |
| on a successful lock, the shell variable var(var) is set to the file
 | |
| descriptor used for locking.  The lock will be released if the
 | |
| file descriptor is closed by any other means, for example using
 | |
| `tt(exec {)var(var)tt(}>&-)'; however, the form described here performs
 | |
| a safety check that the file descriptor is in use for file locking.
 | |
| 
 | |
| By default the shell waits indefinitely for the lock to succeed.
 | |
| The option tt(-t) var(timeout) specifies a timeout for the lock in
 | |
| seconds; currently this must be an integer.  The shell will attempt
 | |
| to lock the file once a second during this period.  If the attempt
 | |
| times out, status 2 is returned.
 | |
| 
 | |
| If the option tt(-e) is given, the file descriptor for the lock is
 | |
| preserved when the shell uses tt(exec) to start a new process;
 | |
| otherwise it is closed at that point and the lock released.
 | |
| 
 | |
| If the option tt(-r) is given, the lock is only for reading, otherwise
 | |
| it is for reading and writing.  The file descriptor is opened
 | |
| accordingly.
 | |
| )
 | |
| item(tt(zsystem supports) var(subcommand))(
 | |
| The builtin tt(zsystem)'s subcommand tt(supports) tests whether a
 | |
| given subcommand is supported.  It returns status 0 if so, else
 | |
| status 1.  It operates silently unless there was a syntax error
 | |
| (i.e. the wrong number of arguments), in which case status 255
 | |
| is returned.  Status 1 can indicate one of two things:  var(subcommand)
 | |
| is known but not supported by the current operating system, or
 | |
| var(subcommand) is not known (possibly because this is an older
 | |
| version of the shell before it was implemented).
 | |
| )
 | |
| enditem()
 | |
| 
 | |
| subsect(Math Functions)
 | |
| 
 | |
| startitem()
 | |
| item(tt(systell+LPAR()var(fd)RPAR()))(
 | |
| The systell math function returns the current file position for the file
 | |
| descriptor passed as an argument.
 | |
| )
 | |
| enditem()
 | |
| 
 | |
| subsect(Parameters)
 | |
| 
 | |
| startitem()
 | |
| vindex(errnos)
 | |
| item(tt(errnos))(
 | |
| A readonly array of the names of errors defined on the system.  These
 | |
| are typically macros defined in C by including the system header file
 | |
| tt(errno.h).  The index of each name (assuming the option tt(KSH_ARRAYS)
 | |
| is unset) corresponds to the error number.  Error numbers var(num)
 | |
| before the last known error which have no name are given the name
 | |
| tt(E)var(num) in the array.
 | |
| 
 | |
| Note that aliases for errors are not handled; only the canonical name is
 | |
| used.
 | |
| )
 | |
| vindex(sysparams)
 | |
| item(tt(sysparams))(
 | |
| A readonly associative array.  The keys are:
 | |
| 
 | |
| startitem()
 | |
| item(tt(pid))(
 | |
| vindex(pid, sysparams)
 | |
| Returns the process ID of the current process, even in subshells.  Compare
 | |
| tt($$), which returns the process ID of the main shell process.
 | |
| )
 | |
| item(tt(ppid))(
 | |
| vindex(ppid, sysparams)
 | |
| Returns the process ID of the parent of the current process, even in
 | |
| subshells.  Compare tt($PPID), which returns the process ID of the parent
 | |
| of the main shell process.
 | |
| )
 | |
| enditem()
 | |
| )
 | |
| enditem()
 |