PUTENV(3P)
π PUTENV β the POSIX girlies' guide π
okay so bestie, quick heads up before we dive in: this page lives in the POSIX Programmer's Manual. The Linux version of this interface might be a lil different (go check the matching Linux man page for the tea on Linux behavior), or honestly it might just not be implemented on Linux at all. π
β¨ 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.
πΈ NAME πΈ
putenv β change or add a value to an environment, no cap π
π SYNOPSIS π
#include <stdlib.h>
int putenv(char *string);
π¦ DESCRIPTION π¦
So putenv() uses its string argument to set environment variable values. That string should point at a string shaped like "name=value". What it does is make the value of the environment variable name equal to value β either by altering a variable that already exists, or by creating a brand new one. Either way, the string pointed to by string shall become part of the environment, so if you alter that string, you change the environment. it's giving "your string is now the environment's problem" π
π«Ά heads up: putenv() need not be thread-safe. Just so you know.
π RETURN VALUE π
If it ate? It returns 0. If it didn't? It returns a non-zero value and sets errno to show you what went wrong. periodt.
π ERRORS π
putenv() may fail if:
ENOMEMβ insufficient memory was available. the malloc said no bestie π
The following sections are informative.
π EXAMPLES π
π Changing the Value of an Environment Variable
This example changes the value of the HOME environment variable to the value /usr/home. iconic, honestly.
#include <stdlib.h>
...
static char *var = "HOME=/usr/home";
int ret;
ret = putenv(var);
β APPLICATION USAGE β
putenv() manipulates the environment pointed to by environ, and can be used in conjunction with getenv(). dream team fr fr β¨
See exec() for restrictions on changing the environment in multi-threaded applications.
This routine may use malloc() to enlarge the environment.
π potential error alert: callingputenv()with an automatic variable as the argument, then returning from the calling function whilestringis still part of the environment. that's a whole mess waiting to happen, don't do it.
Although the space used by string is no longer used once a new string which defines name is passed to putenv(), if any thread in the application has used getenv() to retrieve a pointer to this variable, it should not be freed by calling free(). And if the changed environment variable is one known by the system (like the locale environment variables), the application should never free the buffer used by earlier calls to putenv() for the same variable. like. ever. π
βοΈ
The setenv() function is preferred over this function. One reason is that putenv() is optional and therefore less portable. Another is that using putenv() can slow down environment searches, as explained in the RATIONALE section for getenv(). so if you have a choice, bestieβ¦ choose setenv(). π
π§ RATIONALE π§
Refer to the RATIONALE section in setenv(). that's it, that's the whole vibe.
π FUTURE DIRECTIONS π
None. nada. zero. the future is a blank canvas, bestie π¨
π₯ SEE ALSO π₯
exec, free(), getenv(), malloc(), setenv()
The Base Definitions volume of POSIX.1β2017, <stdlib.h>
π 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 .
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 .
okay bestie that's the whole page, and this masterpiece was brought to you by IEEE/The Open Group, 2017 β PUTENV(3P), that's the manual name, remember it π mwah, go set some environment variables responsibly π«Άβ¨
π¦ where this page comes from
- alpine 3.22: man-pages-posix 2017a-r0 Β· custom
- alpine 3.23: man-pages-posix 2017a-r0 Β· custom
- alpine 3.24: man-pages-posix 2017a-r0 Β· custom
- arch rolling: man-pages 6.19-1
- arch rolling: man-pages 6.20-1 Β· BSD-2-Clause AND BSD-3-Clause AND BSD-4.3TAHOE AND BSD-4-Clause-UC AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-or-later AND LGPL-3.0-linking-exception AND LGPL-3.0-or-later AND LicenseRef-Public-Domain AND LicenseRef-UltraPermissive AND Linux-man-pages-1-para AND Linux-man-pages-copyleft AND Linux-man-pages-copyleft-2-para AND Linux-man-pages-copyleft-var AND MIT AND Spencer-94
- nixpkgs unstable: man-pages-posix 2017a
- opensuse-leap 16.0: man-pages-posix 2017a-160000.4.1 Β· SUSE-IEEE
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms