setenv(3) — Linux manual page

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES | STANDARDS | HISTORY | CAVEATS | BUGS | SEE ALSO | COLOPHON

 setenv(3)                Library Functions Manual               setenv(3) 

NAME         top

        setenv - change or add an environment variable 

LIBRARY         top

        Standard C library (libc, -lc) 

SYNOPSIS         top

        #include <stdlib.h>         int setenv(const char *name, const char *value, int overwrite);        int unsetenv(const char *name);     Feature Test Macro Requirements for glibc (see    feature_test_macros(7)):         setenv(), unsetenv():            _POSIX_C_SOURCE >= 200112L                || /* glibc <= 2.19: */ _BSD_SOURCE 

DESCRIPTION         top

        The setenv() function adds the variable name to the environment        with the value value, if name does not already exist.  If name        does exist in the environment, then its value is changed to value        if overwrite is nonzero; if overwrite is zero, then the value of        name is not changed (and setenv() returns a success status).  This        function makes copies of the strings pointed to by name and value        (by contrast with putenv(3)).         The unsetenv() function deletes the variable name from the        environment.  If name does not exist in the environment, then the        function succeeds, and the environment is unchanged. 

RETURN VALUE         top

        setenv() and unsetenv() functions return zero on success, or -1 on        error, with errno set to indicate the error. 

ERRORS         top

        EINVAL name is NULL, points to a string of length 0, or contains               an '=' character.         ENOMEM Insufficient memory to add a new variable to the               environment. 

ATTRIBUTES         top

        For an explanation of the terms used in this section, see        attributes(7).        ┌──────────────────────────┬───────────────┬─────────────────────┐        │ Interface                Attribute     Value               │        ├──────────────────────────┼───────────────┼─────────────────────┤        │ setenv(), unsetenv()     │ Thread safety │ MT-Unsafe const:env │        └──────────────────────────┴───────────────┴─────────────────────┘ 

STANDARDS         top

        POSIX.1-2008. 

HISTORY         top

        POSIX.1-2001, 4.3BSD.         Prior to glibc 2.2.2, unsetenv() was prototyped as returning void;        more recent glibc versions follow the POSIX.1-compliant prototype        shown in the SYNOPSIS. 

CAVEATS         top

        POSIX.1 does not require setenv() or unsetenv() to be reentrant. 

BUGS         top

        POSIX.1 specifies that if name contains an '=' character, then        setenv() should fail with the error EINVAL; however, versions of        glibc before glibc 2.3.4 allowed an '=' sign in name. 

SEE ALSO         top

        clearenv(3), getenv(3), putenv(3), environ(7) 

COLOPHON         top

        This page is part of the man-pages (Linux kernel and C library        user-space interface documentation) project.  Information about        the project can be found at         ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report        for this manual page, see        ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.        This page was obtained from the tarball man-pages-6.15.tar.gz        fetched from        ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on        2025-08-11.  If you discover any rendering problems in this HTML        version of the page, or you believe there is a better or more up-        to-date source for the page, or you have corrections or        improvements to the information in this COLOPHON (which is not        part of the original manual page), send a mail to        [email protected]  Linux man-pages 6.15            2025-05-17                      setenv(3) 

Pages that refer to this page: ul(1)clearenv(3)getenv(3)libsystemd(3)libudev(3)pmgetconfig(3)putenv(3)sd-bus(3)sd_bus_add_match(3)sd_bus_add_node_enumerator(3)sd_bus_add_object(3)sd_bus_add_object_manager(3)sd_bus_attach_event(3)sd_bus_call(3)sd_bus_call_method(3)sd_bus_can_send(3)sd_bus_close(3)sd_bus_creds_get_pid(3)sd_bus_creds_new_from_pid(3)sd_bus_default(3)sd_bus_emit_signal(3)sd_bus_enqueue_for_read(3)sd_bus_error(3)sd_bus_error_add_map(3)sd-bus-errors(3)sd_bus_get_current_handler(3)sd_bus_get_fd(3)sd_bus_get_name_creds(3)sd_bus_get_name_machine_id(3)sd_bus_interface_name_is_valid(3)sd_bus_is_open(3)sd_bus_list_names(3)sd_bus_message_append(3)sd_bus_message_append_array(3)sd_bus_message_append_basic(3)sd_bus_message_append_string_memfd(3)sd_bus_message_append_strv(3)sd_bus_message_at_end(3)sd_bus_message_copy(3)sd_bus_message_dump(3)sd_bus_message_get_cookie(3)sd_bus_message_get_monotonic_usec(3)sd_bus_message_get_signature(3)sd_bus_message_get_type(3)sd_bus_message_new(3)sd_bus_message_new_method_call(3)sd_bus_message_new_method_error(3)sd_bus_message_new_signal(3)sd_bus_message_open_container(3)sd_bus_message_read(3)sd_bus_message_rewind(3)sd_bus_message_seal(3)sd_bus_message_sensitive(3)sd_bus_message_set_destination(3)sd_bus_message_set_expect_reply(3)sd_bus_message_skip(3)sd_bus_message_verify_type(3)sd_bus_negotiate_fds(3)sd_bus_new(3)sd_bus_path_encode(3)sd_bus_pending_method_calls(3)sd_bus_process(3)sd_bus_query_sender_creds(3)sd_bus_reply_method_error(3)sd_bus_reply_method_return(3)sd_bus_request_name(3)sd_bus_send(3)sd_bus_set_address(3)sd_bus_set_close_on_exit(3)sd_bus_set_connected_signal(3)sd_bus_set_description(3)sd_bus_set_exit_on_disconnect(3)sd_bus_set_fd(3)sd_bus_set_method_call_timeout(3)sd_bus_set_property(3)sd_bus_set_sender(3)sd_bus_set_server(3)sd_bus_set_watch_bind(3)sd_bus_slot_get_bus(3)sd_bus_slot_ref(3)sd_bus_slot_set_description(3)sd_bus_slot_set_destroy_callback(3)sd_bus_slot_set_floating(3)sd_bus_slot_set_userdata(3)sd_bus_start(3)sd_bus_track_add_name(3)sd_bus_track_new(3)sd_bus_wait(3)sd-daemon(3)sd-device(3)sd_device_get_syspath(3)sd-event(3)sd_event_add_child(3)sd_event_add_defer(3)sd_event_add_inotify(3)sd_event_add_io(3)sd_event_add_memory_pressure(3)sd_event_add_signal(3)sd_event_add_time(3)sd_event_exit(3)sd_event_get_fd(3)sd_event_new(3)sd_event_now(3)sd_event_run(3)sd_event_set_signal_exit(3)sd_event_set_watchdog(3)sd_event_source_get_event(3)sd_event_source_get_pending(3)sd_event_source_set_description(3)sd_event_source_set_destroy_callback(3)sd_event_source_set_enabled(3)sd_event_source_set_exit_on_failure(3)sd_event_source_set_floating(3)sd_event_source_set_prepare(3)sd_event_source_set_priority(3)sd_event_source_set_ratelimit(3)sd_event_source_set_userdata(3)sd_event_source_unref(3)sd_event_wait(3)sd_get_seats(3)sd-hwdb(3)sd_hwdb_get(3)sd_hwdb_new(3)sd-id128(3)sd_id128_get_machine(3)sd_id128_randomize(3)sd_id128_to_string(3)sd-journal(3)sd_journal_add_match(3)sd_journal_print(3)sd-json(3)sd_listen_fds(3)sd-login(3)sd_login_monitor_new(3)sd_machine_get_class(3)sd_notify(3)sd_path_lookup(3)sd_seat_get_active(3)sd_session_is_active(3)sd_uid_get_state(3)sd-varlink(3)sd_varlink_push_fd(3)sd_varlink_send(3)sd_varlink_set_description(3)sd_watchdog_enabled(3)environ(7)