---
name: "kenv"
section: "2"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/kenv/2"
---

# kenv(2)

kernel environment

## NAME

**kenv** – kernel environment

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<kenv.h\>**

*int*\

**kenv**(*int action*, *const char \*name*, *char \*value*, *int len*);

## DESCRIPTION

The **kenv**() system call manipulates kernel environment variables. It supports the well known userland actions of getting, setting and unsetting environment variables, as well as the ability to dump all of the entries in the kernel environment.

The *action* argument can be one of the following:

- KENV\_GET

  Returns the value associated with the named kernel environment variable. If the variable is not found, -1 is returned and the global variable *errno* is set to ENOENT. Only the number of bytes available in *value* are copied out.

- KENV\_SET

  Sets or adds a new kernel environment variable. This option is only available to the superuser.

- KENV\_UNSET

  Unsets the kernel environment variable *name*. If the variable does not exist, -1 is returned and the global variable *errno* is set to EINVAL. This option is only available to the superuser.

- KENV\_DUMP

  Dumps as much of the kernel environment as will fit in *value*. If *value* is NULL, **kenv**() will return the number of bytes required to copy out the entire environment.

The *name* argument is the name of the environment variable to be affected. In the case of KENV\_DUMP it is ignored.

The *value* argument contains either the value to set the environment variable *name* to in the case of KENV\_SET, or it points to the location where **kenv**() should copy return data to in the case of KENV\_DUMP and KENV\_GET. If *value* is NULL in the case of KENV\_DUMP, **kenv**() will return the number of bytes required to copy out the entire environment.

The *len* argument indicates how many bytes of storage *value* points to.

## RETURN VALUES

The **kenv**() system call returns 0 if successful in the case of KENV\_SET and KENV\_UNSET, and the number of bytes copied into *value* in the case of KENV\_DUMP and KENV\_GET. If an error occurs, a value of -1 is returned and the global variable *errno* is set to indicate the error.

## ERRORS

The **kenv**() system call will fail if:

- \[EINVAL\]

  The *action* argument is not a valid option, or the length of the *value* is less than 1 for a KENV\_SET.

- \[ENOENT\]

  no value could be found for *name* for a KENV\_SET or KENV\_UNSET.

- \[EPERM\]

  a user other than the superuser attempted to set or unset a kernel environment variable.

- \[EFAULT\]

  bad address was encountered while attempting to copy in user arguments, or copy out value(s).

- \[ENAMETOOLONG\]

  the name of a variable supplied by the user is longer than KENV\_MNAMELEN or the value of a variable is longer than KENV\_MVALLEN.

## SEE ALSO

[kenv(1)](/kenv/1.md)

## AUTHORS

This manual page was written by Chad David ⟨davidc@FreeBSD.org⟩.

The **kenv**() system call was written by Maxime Henrion ⟨mux@FreeBSD.org⟩.
