gpt4 book ai didi

gcc - 以非编译器特定的方式更改 Fortran 中的目录

转载 作者:行者123 更新时间:2023-12-04 22:03:07 28 4
gpt4 key购买 nike

我希望更改 Fortran 90 代码中的工作目录。是否可以以非编译器特定的方式执行此操作?这是我的代码:

program change_directory
integer :: ierr

call system("mkdir -p myfolder/")
!call system("cd myfolder/") !doesn't work
ierr = chdir("myfolder")
if (ierr.NE.0) then
write(*,'(A)') "warning: change of directory unsuccessful"
end if

open(unit=33,file="myfile.txt",iostat=ierr)
if (ierr.EQ.0) then
write(unit=33,fmt='(A)') "Test message"
close(unit=33)
end if
end program change_directory

显然,使用 cd myfolder/在系统调用中不起作用。 Intel reference说我需要添加' use ifport '。 GCC reference 中没有这样的提及, 尽管。省略 ' use ifport ',我可以在 ifort下编译上面的代码没有任何麻烦。然而,当我把它放进去时,它不能用 gcc 编译(因为 gcc 没有 ifport 模块)——不仅如此,它也不能在 Intel Fortran 下编译——我得到了以下错误:
$ ifort change_dir.f90 -o change_dir
change_dir.f90(5): error #6552: The CALL statement is invoking a function subprogram as a subroutine. [SYSTEM]
call system("mkdir -p myfolder/")
---------^
compilation aborted for change_dir.f90 (code 1)

所以我的问题如下:有没有更好的方法来做到这一点?我想让我的代码尽可能独立于编译器。目前,我主要使用 gfortran/ifort 和 mpif90/mpiifort。

最佳答案

另见 Is there any way to change directory using C language? .您可以制作自己的接口(interface)到chdir() POSIX call独立于英特尔的接口(interface)。在 Windows 上是类似的。

module chdir_mod

implicit none

interface
integer function c_chdir(path) bind(C,name="chdir")
use iso_c_binding
character(kind=c_char) :: path(*)
end function
end interface

contains

subroutine chdir(path, err)
use iso_c_binding
character(*) :: path
integer, optional, intent(out) :: err
integer :: loc_err

loc_err = c_chdir(path//c_null_char)

if (present(err)) err = loc_err
end subroutine
end module chdir_mod


program test

use chdir_mod

call chdir("/")

call system("ls -l")

end

并且在运行时
> gfortran chdir.f90 
> ./a.out
celkem 120
drwxr-xr-x 2 root root 4096 15. říj 14.42 bin
drwxr-xr-x 5 root root 4096 15. říj 14.43 boot
...

ifort它也像在 sunf90 上一样工作.

(注意:这依赖于默认 characterc_char 相同。这是一个非常安全的假设。如果不是这种情况,编译器会提示并且必须进行转换。)

关于gcc - 以非编译器特定的方式更改 Fortran 中的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26730836/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com