fortran:如何获取集群的节点名称

我正在Linux系统上运行一个集群上运行fortran代码。 当代码开始运行时,我希望它输出运行节点的一些基本信息,尤其是节点名称。 如何在Fortran中做到这一点。

Solutions Collecting From Web of "fortran:如何获取集群的节点名称"

如果你的代码与MPI并行 – 对于在群集上运行的代码是很常见的,那么只需调用MPI_Get_processor_name()即可。 如果没有,只需使用iso_c_binding模块来调用C函数gethostname() ,这又一次。

编辑 :这里是如何调用gethostname()iso_c_binding模块的iso_c_binding 。 我绝对不是专家,所以它可能不是最有效的一个…

 module unistd interface integer( kind = C_INT ) function gethostname( hname, len ) bind( C, name = 'gethostname' ) use iso_c_binding implicit none character( kind = C_CHAR ) :: hname( * ) integer( kind = C_INT ), VALUE :: len end function gethostname end interface end module unistd program hostname use iso_c_binding use unistd implicit none integer( kind = C_INT ), parameter :: sl = 100 character( kind = C_CHAR ) :: hn( sl ) character( len = sl ) :: fn character :: c integer :: res, i, j res = gethostname( hn, sl ) if ( res == 0 ) then do i = 1, sl c = hn( i ) if ( c == char( 0 ) ) exit fn( i: i ) = c end do do j = i, sl fn( j: j ) = ' ' end do print *, "->", trim( fn ), "<-" else print *, "call to gethostname() didn't work..." end if end program hostname 

如果你想要的信息被包含在一个环境变量中,那么简单的方法就是从调用get_environment_variable获取它的值。 对于主机名

 program gethost character*32 hostname call get_environment_variable('HOST',hostname) write(*,*) 'My gracious host is ',trim(hostname) end program gethost