VMS Help  —  CRTL  getenv  Description
    In certain situations, the getenv function attempts to perform a
    logical name translation on the user-specified argument:

    1. If the argument to getenv does not match any of the
       environment strings present in your environment array, getenv
       attempts to translate your argument as a logical name by
       searching the logical name tables indicated by the LNM$FILE_
       DEV logical, as is done for file processing.

       getenv first does a case-sensitive lookup. If that fails, it
       does a case-insensitive lookup. In most instances, logical
       names are defined in uppercase, but getenv can also find
       logical names that include lowercase letters.

       getenv does not perform iterative logical name translation.

    2. If the logical name is a search list with multiple equivalence
       values, the returned value points to the first equivalence
       value. For example:

       $ DEFINE A B,C

       ptr = getenv("A");

       A returns a pointer to "B".

    3. If no logical name exists, getenv attempts to translate the
       argument string as a CLI symbol. If it succeeds, it returns
       the translated symbol text. If it fails, the return value is
       NULL.

       getenv does not perform iterative CLI translation.

    If your CLI is the DEC/Shell, the function does not attempt a
    logical name translation since Shell environment symbols are
    implemented as DCL symbols.

                                  NOTES

       o  In OpenVMS Version 7.1, a cache of OpenVMS environment
          variables (that is, logical names and DCL symbols)
          was added to the getenv function to avoid the library
          making repeated calls to translate a logical name or
          to obtain the value of a DCL symbol. By default, the
          cache is disabled. If your application does not need to
          track changes in OpenVMS environment variables that can
          occur during its execution, the cache can be enabled
          by enabling the DECC$ENABLE_GETENV_CACHE logical before
          invoking the application.

       o  Do not use the setenv, getenv, and putenv functions
          to manipulate symbols and logicals. Instead use the
          OpenVMS library calls lib$set_logical, lib$get_logical,
          lib$set_symbol, and lib$get_symbol. The *env functions
          deliberately provide UNIX behavior, and are not a
          substitute for these OpenVMS runtime library calls.

          OpenVMS DCL symbols, not logical names, are the closest
          analog to environment variables on UNIX systems. While
          getenv is a mechanism to retrieve either a logical name
          or a symbol, it maintains an internal cache of values for
          use with setenv and subsequent getenv calls. The setenv
          function does not write or create DCL symbols or OpenVMS
          logical names.

          This is consistent with UNIX behavior. On UNIX systems,
          setenv does not change or create any symbols that will be
          visible in the shell after the program exits.
Close Help