COHERENT manpages
This page displays the COHERENT manpage for execve() [Execute a load module].
List of available manpages
Index
execve() -- System Call (libc)
Execute a load module
#include <unistd.h>
execve(file, argv, env)
char *file, *argv[], *env[];
The function execve() executes a program. It specifies arguments as a
single, NULL-terminated array of parameters, called argv. The argument env
is the address of an array of pointers to strings that define file's
environment. This allows execve() to pass a new environment to the program
being executed. For more information on program execution, see execution.
Example
The following example demonstrates execve(), as well as tmpnam(), getenv(),
and path(). It finds all lines with more than LIMIT characters and calls
MicroEMACS to edit them.
#include <stdio.h>
#include <path.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#define LIMIT 70
extern **environ, *tempnam();
main(argc, argv)
int argc; char *argv[];
{
/* me -e tmp file */
char *cmda[5] = { NULL, "-e", NULL, NULL, NULL };
FILE *ifp, *tmp;
char line[256];
int ct, len;
if ((NULL == (cmda[3] = argv[1])) ||
(NULL == (ifp = fopen(argv[1], "r")))) {
fprintf(stderr, "Cannot open %s\n", argv[1]);
exit(EXIT_FAILURE);
}
if ((cmda[0] = path(getenv("PATH"), "me", X_OK)) == NULL) {
fprintf(stderr, "Cannot locate me\n");
exit(EXIT_FAILURE);
}
if (NULL == (tmp = fopen((cmda[2] = tempnam(NULL, "lng")), "w"))) {
fprintf(stderr, "Cannot open tmpfile\n");
exit(EXIT_FAILURE);
}
for (ct = 1; NULL != fgets(line, sizeof(line), ifp); ct++)
if (((len = strlen(line)) > LIMIT) ||
('\n' != line[len -1]))
fprintf(tmp, "%d: %d characters long\n", ct, len);
fclose(tmp);
fclose(ifp);
if (execve(cmda[0], cmda, environ) < 0) {
fprintf(stderr, "cannot execute me\n");
exit(EXIT_FAILURE);
}
}
See Also
environ,
execution,
libc,
unistd.h
POSIX Standard, §3.1.2
Diagnostics
execve() does not return if successful. It returns -1 for errors, such as
file being nonexistent, not accessible with execute permission, having a
bad format, or too large to fit in memory.



