NAME PEXEC(III)
pexec - path search and execute a file
SYNOPSIS
char pathstr[128];
char shellnam[16];
pexec(name, argv)
char *name, *argv[];
pexinit( )
DESCRIPTION
Pexec provides an interface to the execv function that
duplicates the shell's actions in searching for an execut-
able file in a list of directories, as specified in the
user's `.path' file.
Pexinit investigates the external arrays pathstr and
shellnam. If either array is non-null, it leaves that array
alone. If pathstr is null, it attempts to open the user's
`.path' file and place the first line found there into
pathstr, to be used later as a list of directories to be
searched. If `.path' cannot be opened, it uses:
/bin:/etc:/ for super-user
:/bin:/usr/bin for anyone else
If a second line is found in the `.path' file, it is taken
as the name of the shell to be executed to interpret a shell
procedure. If none is found, `/bin/sh' is used. Pexinit
returns 0 to show successful completion, guaranteeing both
arrays filled, and -1 otherwise.
Pexec first calls pexinit, then searches for the named file
and executes it. The existence of two functions permits
pexinit to be called once, followed by many fork/pexec
pairs.
This function is kept in the -lPW library.
SEE ALSO
sh(I), exec(II), fork(II)
DIAGNOSTICS
Items in parentheses refer to error names in intro(II).
``cannot read .path''
``.path too long'' (more than 128+16 = 144 bytes long)
``No shell!'' (real trouble, cannot execute shell)
``too large'' (ENOMEM)
``arg list too long'' (E2BIG)
``file not executable'' (EACCES, no x bits set in file mode)
``not found'' (name could not be found at all)
``text busy'' (ETXTBSY, should be very rare)
BUGS
A pathname generated by the search mechanism may not exceed
47 characters in length.