putenv.3p (4124B)
- '\" et
- .TH PUTENV "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
- .\"
- .SH PROLOG
- This manual page is part of the POSIX Programmer's Manual.
- The Linux implementation of this interface may differ (consult
- the corresponding Linux manual page for details of Linux behavior),
- or the interface may not be implemented on Linux.
- .\"
- .SH NAME
- putenv
- \(em change or add a value to an environment
- .SH SYNOPSIS
- .LP
- .nf
- #include <stdlib.h>
- .P
- int putenv(char *\fIstring\fP);
- .fi
- .SH DESCRIPTION
- The
- \fIputenv\fR()
- function shall use the
- .IR string
- argument to set environment variable values. The
- .IR string
- argument should point to a string of the form "\c
- .IR name =\c
- .IR value \c
- \&".
- The
- \fIputenv\fR()
- function shall make the value of the environment variable
- .IR name
- equal to
- .IR value
- by altering an existing variable or creating a new one. In either
- case, the string pointed to by
- .IR string
- shall become part of the environment, so altering the string shall
- change the environment.
- .P
- The
- \fIputenv\fR()
- function need not be thread-safe.
- .SH "RETURN VALUE"
- Upon successful completion,
- \fIputenv\fR()
- shall return 0; otherwise, it shall return a non-zero value and set
- .IR errno
- to indicate the error.
- .SH ERRORS
- The
- \fIputenv\fR()
- function may fail if:
- .TP
- .BR ENOMEM
- Insufficient memory was available.
- .LP
- .IR "The following sections are informative."
- .SH EXAMPLES
- .SS "Changing the Value of an Environment Variable"
- .P
- The following example changes the value of the
- .IR HOME
- environment variable to the value
- .BR /usr/home .
- .sp
- .RS 4
- .nf
- #include <stdlib.h>
- \&...
- static char *var = "HOME=/usr/home";
- int ret;
- .P
- ret = putenv(var);
- .fi
- .P
- .RE
- .SH "APPLICATION USAGE"
- The
- \fIputenv\fR()
- function manipulates the environment pointed to by
- .IR environ ,
- and can be used in conjunction with
- \fIgetenv\fR().
- .P
- See
- \fIexec\fR()
- for restrictions on changing the environment in multi-threaded
- applications.
- .P
- This routine may use
- \fImalloc\fR()
- to enlarge the environment.
- .P
- A potential error is to call
- \fIputenv\fR()
- with an automatic variable as the argument, then return from the
- calling function while
- .IR string
- is still part of the environment.
- .P
- Although the space used by
- .IR string
- is no longer used once a new string which defines
- .IR name
- is passed to
- \fIputenv\fR(),
- if any thread in the application has used
- \fIgetenv\fR()
- to retrieve a pointer to this variable, it should not be freed by calling
- \fIfree\fR().
- If the changed environment variable is one known by the system (such as
- the locale environment variables) the application should never free the
- buffer used by earlier calls to
- \fIputenv\fR()
- for the same variable.
- .P
- The
- \fIsetenv\fR()
- function is preferred over this function. One reason is that
- \fIputenv\fR()
- is optional and therefore less portable. Another is that using
- \fIputenv\fR()
- can slow down environment searches, as explained in the RATIONALE
- section for
- .IR "\fIgetenv\fR\^(\|)".
- .SH RATIONALE
- Refer to the RATIONALE section in
- .IR "\fIsetenv\fR\^(\|)".
- .SH "FUTURE DIRECTIONS"
- None.
- .SH "SEE ALSO"
- .IR "\fIexec\fR\^",
- .IR "\fIfree\fR\^(\|)",
- .IR "\fIgetenv\fR\^(\|)",
- .IR "\fImalloc\fR\^(\|)",
- .IR "\fIsetenv\fR\^(\|)"
- .P
- The Base Definitions volume of POSIX.1\(hy2017,
- .IR "\fB<stdlib.h>\fP"
- .\"
- .SH COPYRIGHT
- Portions of this text are reprinted and reproduced in electronic form
- from IEEE Std 1003.1-2017, Standard for Information Technology
- -- Portable Operating System Interface (POSIX), The Open Group Base
- Specifications Issue 7, 2018 Edition,
- Copyright (C) 2018 by the Institute of
- Electrical and Electronics Engineers, Inc and The Open Group.
- In the event of any discrepancy between this version and the original IEEE and
- The Open Group Standard, the original IEEE and The Open Group Standard
- is the referee document. The original Standard can be obtained online at
- http://www.opengroup.org/unix/online.html .
- .PP
- Any typographical or formatting errors that appear
- in this page are most likely
- to have been introduced during the conversion of the source files to
- man page format. To report such errors, see
- https://www.kernel.org/doc/man-pages/reporting_bugs.html .