NAME
setenv — add or
change environment variable
SYNOPSIS
int setenv(const char *envname, const char *envval, int overwrite);
DESCRIPTION
The setenv () function shall update or add
a variable in the environment of the calling process. The
envname argument points to a string containing the name of
an environment variable to be added or altered. The environment variable
shall be set to the value to which envval points. The
function shall fail if envname points to a string which
contains an ‘=’ character. If the
environment variable named by envname already exists and
the value of overwrite is non-zero, the function shall
return success and the environment shall be updated. If the environment
variable named by envname already exists and the value of
overwrite is zero, the function shall return success and
the environment shall remain unchanged.
If the application modifies environ or the
pointers to which it points, the behavior of setenv
() is undefined. The setenv () function shall update
the list of pointers to which environ points.
The strings described by envname and envval are copied by this function.
The setenv () function need not be
reentrant. A function that is not required to be reentrant is not required
to be thread-safe.
RETURN VALUE
Upon successful completion, zero shall be returned. Otherwise, -1 shall be returned, errno set to indicate the error, and the environment shall be unchanged.
ERRORS
The setenv () function shall fail if:
EXAMPLES
None.
APPLICATION USAGE
None.
RATIONALE
Unanticipated results may occur if setenv
() changes the external variable environ. In particular,
if the optional
envp
argument to
main () is
present, it is not changed, and thus may point to an obsolete copy of the
environment (as may any other copy of environ). However,
other than the aforementioned restriction, the developers of
IEEE Std 1003.1-2001 (“POSIX.1”)
intended that the traditional method of walking through the environment by
way of the environ pointer must be supported.
It was decided that setenv () should be
required by this revision because it addresses a piece of missing
functionality, and does not impose a significant burden on the
implementor.
There was considerable debate as to whether the System V
putenv(3) function or the BSD
setenv () function should be required as a mandatory
function. The setenv () function was chosen because
it permitted the implementation of the unsetenv(3)
function to delete environmental variables, without specifying an additional
interface. The putenv(3) function is available as an XSI
extension.
The standard developers considered requiring that
setenv () indicate an error when a call to it would
result in exceeding {ARG_MAX}. The requirement was rejected since the
condition might be temporary, with the application eventually reducing the
environment size. The ultimate success or failure depends on the size at the
time of a call to
exec, which returns
an indication of this error condition.
FUTURE DIRECTIONS
None.
SEE ALSO
getenv(3) , unsetenv(3) , the Base Definitions volume of IEEE Std 1003.1-2001 (“POSIX.1”), <stdlib.h>, <sys/types.h>, <unistd.h>
CHANGE HISTORY
First released in Issue 6. Derived from the IEEE P1003.1a draft standard.
End of informative text. footer end