zoukankan      html  css  js  c++  java
  • getenv, _wgetenv

    Description

    The C library function char *getenv(const char *name) searches for the environment string pointed to by name and returns the associated value to the string.

    Declaration

    Following is the declaration for getenv() function.

    char *getenv(const char *name)

    Parameters

    • name -- This is the C string containing the name of the requested variable.

    Return Value

    This function returns a null-terminated string with the value of the requested environment variable, or NULL if that environment variable does not exist.

    Example

    The following example shows the usage of getenv() function.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main ()
    {
       printf("PATH : %s
    ", getenv("PATH"));
       printf("HOME : %s
    ", getenv("HOME"));
       printf("ROOT : %s
    ", getenv("ROOT"));
    
       return(0);
    }

    Let us compile and run the above program that will produce the following result:

    PATH : /sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
    HOME : /
    ROOT : (null)






    std::getenv

    Defined in header <cstdlib>
       
    char* getenvconst char* env_var );
       
         

    Searches the environment list provided by the host environment (the OS), for a string that matches the C string pointed to by env_var and returns a pointer to the C string that is associated with the matched environment list member.

    This function is not required to be thread-safe. Another call to getenv, as well as a call to the POSIX functions setenv()unsetenv(), and putenv() may invalidate the pointer returned by a previous call or modify the string obtained from a previous call.

    (until C++11)

    This function is thread-safe (calling it from multiple threads does not introduce a data race) as long as no other function modifies the host environment. In particular, the POSIX functions setenv()unsetenv(), and putenv() would introduce a data race if called without synchronization.

    (since C++11)

    Modifying the string returned by getenv invokes undefined behavior.

    Parameters

    env_var - null-terminated character string identifying the name of the environmental variable to look for

    Return value

    Character string identifying the value of the environmental variable or null pointer if such variable is not found.

    Notes

    On POSIX systems, the environment variables are also accessible through the global variable environ, declared as extern char **environ; in <unistd.h>, and through the optional third argument, envp, of the main function.

    Example

    #include <iostream>
    #include <cstdlib>
     
    int main()
    {
        if(const char* env_p = std::getenv("PATH"))
            std::cout << "Your PATH is: " << env_p << '
    ';
    }

    Possible output:

    Your PATH is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games






    getenv, _wgetenv

    Visual Studio 2015
     
    Other Versions
     
     

    Gets a value from the current environment. More secure versions of these functions are available; see getenv_s, _wgetenv_s.

    System_CAPS_importantImportant

    This API cannot be used in applications that execute in the Windows Runtime. For more information, see CRT functions not supported with /ZW.

    Syntax

     
     
     
    char *getenv( 
       const char *varname 
    );
    wchar_t *_wgetenv( 
       const wchar_t *varname 
    );
    

    Parameters

     
    varname

    Environment variable name.

    Return Value

     

    Returns a pointer to the environment table entry containing varname. It is not safe to modify the value of the environment variable using the returned pointer. Use the _putenv function to modify the value of an environment variable. The return value is NULL if varname is not found in the environment table.

    Remarks

     

    The getenv function searches the list of environment variables for varnamegetenv is not case sensitive in the Windows operating system. getenvand _putenv use the copy of the environment pointed to by the global variable _environ to access the environment. getenv operates only on the data structures accessible to the run-time library and not on the environment "segment" created for the process by the operating system. Therefore, programs that use the envp argument to main or wmain may retrieve invalid information.

    If varname is NULL, this function invokes an invalid parameter handler, as described in Parameter Validation. If execution is allowed to continue, this function sets errno to EINVAL and returns NULL.

    _wgetenv is a wide-character version of getenv; the argument and return value of _wgetenv are wide-character strings. The _wenviron global variable is a wide-character version of _environ.

    In an MBCS program (for example, in an SBCS ASCII program), _wenviron is initially NULL because the environment is composed of multibyte-character strings. Then, on the first call to _wputenv, or on the first call to _wgetenv if an (MBCS) environment already exists, a corresponding wide-character string environment is created and is then pointed to by _wenviron.

    Similarly in a Unicode (_wmain) program, _environ is initially NULL because the environment is composed of wide-character strings. Then, on the first call to _putenv, or on the first call to getenv if a (Unicode) environment already exists, a corresponding MBCS environment is created and is then pointed to by _environ.

    When two copies of the environment (MBCS and Unicode) exist simultaneously in a program, the run-time system must maintain both copies, resulting in slower execution time. For example, whenever you call _putenv, a call to _wputenv is also executed automatically, so that the two environment strings correspond.

    System_CAPS_cautionCaution

    In rare instances, when the run-time system is maintaining both a Unicode version and a multibyte version of the environment, these two environment versions may not correspond exactly. This is because, although any unique multibyte-character string maps to a unique Unicode string, the mapping from a unique Unicode string to a multibyte-character string is not necessarily unique. For more information, see _environ, _wenviron.

    System_CAPS_noteNote

    The _putenv and _getenv families of functions are not thread-safe. _getenv could return a string pointer while _putenv is modifying the string, causing random failures. Make sure that calls to these functions are synchronized.

    Generic-Text Routine Mappings

    TCHAR.H routine

    _UNICODE & _MBCS not defined

    _MBCS defined

    _UNICODE defined

    _tgetenv

    getenv

    getenv

    _wgetenv

    To check or change the value of the TZ environment variable, use getenv_putenv and _tzset as necessary. For more information about TZ, see_tzset and _daylight, timezone, and _tzname.

    Requirements

    Routine

    Required header

    getenv

    <stdlib.h>

    _wgetenv

    <stdlib.h> or <wchar.h>

    For additional compatibility information, see Compatibility.

    Example

     
     
    // crt_getenv.c
    // compile with: /W3
    // This program uses getenv to retrieve
    // the LIB environment variable and then uses
    // _putenv to change it to a new value.
    
    #include <stdlib.h>
    #include <stdio.h>
    
    int main( void )
    {
       char *libvar;
    
       // Get the value of the LIB environment variable.
       libvar = getenv( "LIB" ); // C4996
       // Note: getenv is deprecated; consider using getenv_s instead
    
       if( libvar != NULL )
          printf( "Original LIB variable is: %s
    ", libvar );
    
       // Attempt to change path. Note that this only affects the environment
       // variable of the current process. The command processor's
       // environment is not changed.
       _putenv( "LIB=c:\mylib;c:\yourlib" ); // C4996
       // Note: _putenv is deprecated; consider using putenv_s instead
    
       // Get new value.
       libvar = getenv( "LIB" ); // C4996
    
       if( libvar != NULL )
          printf( "New LIB variable is: %s
    ", libvar );
    }
    
    Original LIB variable is: C:progra~1devstu~1vclib
    New LIB variable is: c:mylib;c:yourlib
  • 相关阅读:
    C++ 模板特化
    左值引用,右值引用以及移动语义
    搜狐2016研发工程师编程题
    java配置环境变量与常用技巧
    java在线聊天项目 使用SWT快速制作登录窗口,可视化窗口Design 更换窗口默认皮肤(切换Swing自带的几种皮肤如矩形带圆角)
    c++中的结构体:声明 定义 初始化
    用指针变量作函数形参接收数组地址,解决10个整数按由小到大顺序排序问题
    java在线聊天项目 实现基本聊天功能后补充的其他功能详细需求分析 及所需要掌握的Java知识基础 SWT的激活方法,swt开发包下载,及破解激活码
    java在线聊天项目1.0版 异常处理——开启多个客户端,关闭一个客户端后,在其他客户端中再发出信息会出现异常的处理
    第十一次作业
  • 原文地址:https://www.cnblogs.com/kex1n/p/5138436.html
Copyright © 2011-2022 走看看