Namespaces
Variants

getenv, getenv_s

From cppreference.net
Definido en el encabezado <stdlib.h>
char * getenv ( const char * name ) ;
(1)
errno_t getenv_s ( size_t * restrict len, char * restrict value,
rsize_t valuesz, const char * restrict name ) ;
(2) (desde C11)
1) Busca una variable de entorno con nombre name en la lista de entornos especificada por el host y devuelve un puntero a la cadena que está asociada con la variable de entorno coincidente. El conjunto de variables de entorno y los métodos para modificarlo están definidos por la implementación.
Esta función no requiere ser thread-safe. Otra llamada a getenv , así como una llamada a las funciones POSIX setenv() , unsetenv() , y putenv() puede invalidar el puntero devuelto por una llamada anterior o modificar la cadena obtenida de una llamada anterior.
Modificar la cadena devuelta por getenv provoca un comportamiento indefinido.
2) Igual que (1) , excepto que los valores de la variable de entorno se escriben en el búfer proporcionado por el usuario value (a menos que sea nulo) y el número de bytes escritos se almacena en la ubicación proporcionada por el usuario * len (a menos que sea nulo). Si la variable de entorno no está definida en el entorno, se escribe cero en * len (a menos que sea nulo) y ' \0 ' se escribe en value [ 0 ] (a menos que sea nulo). Además, los siguientes errores se detectan en tiempo de ejecución y llaman a la función manejador de restricciones actualmente instalada:
  • name es un puntero nulo
  • valuesz es mayor que RSIZE_MAX
  • value es un puntero nulo y valuesz no es cero
Como con todas las funciones con verificación de límites, getenv_s solo está garantizado que esté disponible si __STDC_LIB_EXT1__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <stdlib.h> .

Contenidos

Parámetros

name - cadena de caracteres terminada en nulo que identifica el nombre de la variable de entorno a buscar
len - puntero a una ubicación proporcionada por el usuario donde getenv_s almacenará la longitud de la variable de entorno
value - puntero a un arreglo de caracteres proporcionado por el usuario donde getenv_s almacenará el contenido de la variable de entorno
valuesz - número máximo de caracteres que getenv_s puede escribir en dest (tamaño del búfer)

Valor de retorno

1) cadena de caracteres que identifica el valor de la variable de entorno o puntero nulo si dicha variable no se encuentra.
2) cero si la variable de entorno fue encontrada, distinto de cero si no fue encontrada o si ocurrió una violación de restricción en tiempo de ejecución. En cualquier error, escribe cero en * len (a menos que len sea un puntero nulo).

Notas

En sistemas POSIX, las variables de entorno también son accesibles mediante la variable global environ , declarada como extern char ** environ ; en <unistd.h> , y mediante el tercer argumento opcional, envp , de la función main .

La llamada a getenv_s con un puntero nulo para value y cero para valuesz se utiliza para determinar el tamaño del búfer requerido para contener el resultado completo.

Ejemplo

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const char *name = "PATH";
    const char *env_p = getenv(name);
    if (env_p)
        printf("Your %s is %s\n", name, env_p);
}

Salida posible:

Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.22.4.6 La función getenv (p: TBD)
  • K.3.6.2.1 La función getenv_s (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.22.4.6 La función getenv (p: 256-257)
  • K.3.6.2.1 La función getenv_s (p: 440-441)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.22.4.6 La función getenv (p: 352-353)
  • K.3.6.2.1 La función getenv_s (p: 606-607)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.20.4.5 La función getenv (p: 317)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.10.4.4 La función getenv

Véase también