Environment Variables in Co-array Fortran

Our program demonstrates how to work with environment variables in Co-array Fortran. Environment variables are a universal mechanism for conveying configuration information to programs. Let’s look at how to set, get, and list environment variables.

program environment_variables
    use iso_fortran_env
    implicit none

    character(len=:), allocatable :: foo, bar
    character(len=:), allocatable :: env_var
    integer :: i, status
    character(len=1024) :: buffer
    integer :: count

    ! To set a key/value pair, use the setenv subroutine
    ! To get a value for a key, use the get_environment_variable subroutine
    call setenv("FOO", "1", status)
    call get_environment_variable("FOO", length=count, status=status)
    allocate(character(len=count) :: foo)
    call get_environment_variable("FOO", value=foo, status=status)
    print *, "FOO:", foo

    call get_environment_variable("BAR", length=count, status=status)
    if (status == 0) then
        allocate(character(len=count) :: bar)
        call get_environment_variable("BAR", value=bar, status=status)
        print *, "BAR:", bar
    else
        print *, "BAR: "
    end if

    ! Use get_environment_variable to list all key/value pairs in the environment
    print *
    i = 1
    do
        call get_environment_variable(name=null(), value=buffer, length=count, status=status, trim_name=.true.)
        if (status /= 0) exit
        print *, buffer(1:count)
        i = i + 1
    end do

end program environment_variables

To compile and run the program:

$ gfortran -o environment_variables environment_variables.f90
$ ./environment_variables
FOO: 1
BAR: 

TERM_PROGRAM=...
PATH=...
SHELL=...
...
FOO=1

The list of keys in the environment will depend on your particular machine.

If we set BAR in the environment first, the running program picks that value up:

$ export BAR=2
$ ./environment_variables
FOO: 1
BAR: 2
...

Note that Co-array Fortran doesn’t have a direct equivalent to Go’s os.Environ() function. Instead, we’ve used a loop with get_environment_variable to retrieve all environment variables. Also, string handling in Fortran is different from Go, so we’ve had to use allocatable character variables and handle string lengths explicitly.

查看推荐产品

Comments powered by Disqus