我想在Fortran程序中执行命令export $VAR=3
。不幸的是,子程序system
无法做到。你能帮我解决一下如何执行VAR
的初始化吗?我正在使用ifort版本11.1。
答案 0 :(得分:2)
一种可能的解决方案是使用Fortran的C例程和iso_c_binding
内在模块。通过C,您可以设置环境变量,然后Fortran程序启动的任何程序都可以访问这些变量。这适用于大多数平台和编译器。
C例程
#include <stdio.h>
#include <stdlib.h> /* putenv, getenv */
void c_setgetenv ()
{
char* p;
putenv("x=100");
p = getenv("x");
if (p!=NULL)
printf (" The variable is: %s\n",p);
}
Fortran计划
program main
use, intrinsic :: iso_c_binding
implicit none
! The interface for the C routine
interface
subroutine c_setgetenv () bind(c)
import ! use declarations from host (implicit none, iso_c_binding)
end subroutine c_setgetenv
end interface
character(len=20) :: val
!! begin
call c_setgetenv()
call get_environment_variable(name="x",value=val)
print *, "Fortran: ", val
end program main
在这个例子中,我还没有将任何args从Fortran传递给C例程,但是如果需要,你可以自定义和处理它。请注意,您需要编译C链接代码并将其链接到Fortran程序。
答案 1 :(得分:0)
在英特尔Fortran中,您可以使用非标准扩展SETNVQQ
或调用相应的操作系统函数(Win API或POSIX)。
没有Fortran标准方式。
它只会影响当前进程和子进程。
character(20) :: val
call setenvqq("x=5")
call get_environment_variable(name="x",value=val)
print *, val
call execute_command_line("echo $x")
end
和
> ifort setenvqq.f90
> ./a.out
5
5