我在装有linux系统的集群上运行fortran代码。当代码开始运行时,我希望它输出运行它的节点的一些基本信息,尤其是节点名称。怎么在fortran做。
答案 0 :(得分:3)
如果您的代码与MPI并行化 - 这对于在群集上运行的代码来说很常见 - 那么只需调用MPI_Get_processor_name()
即可。
如果没有,只需使用iso_c_binding
模块调用C函数gethostname()
,这也就是这样。
编辑:以下是有关如何使用gethostname()
模块调用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
答案 1 :(得分:3)
如果您想要的信息包含在环境变量中,那么简单的方法就是通过调用get_environment_variable
来获取其值。对于主机名
program gethost
character*32 hostname
call get_environment_variable('HOST',hostname)
write(*,*) 'My gracious host is ',trim(hostname)
end program gethost