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: calling putenv() with an automatic variable as the argument, then returning from the calling function while string is 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>


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