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_variablesTo compile and run the program:
$ gfortran -o environment_variables environment_variables.f90
$ ./environment_variables
FOO: 1
BAR:
TERM_PROGRAM=...
PATH=...
SHELL=...
...
FOO=1The 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