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

2024-02-02

我希望更改 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/在系统调用中不起作用。这英特尔参考 https://software.intel.com/en-us/node/511525说我需要添加'use ifport'。文中没有这样的提及海湾合作委员会参考 https://gcc.gnu.org/onlinedocs/gcc-4.4.0/gfortran/CHDIR.html, 尽管。离开了 '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。


也可以看看有没有办法用C语言改变目录? https://stackoverflow.com/questions/1293660/is-there-any-way-to-change-directory-using-c-language。您可以制作自己的接口chdir() POSIX 调用 http://linux.die.net/man/3/chdir独立于Intel的接口。在 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
...

On ifort它也像它一样工作sunf90.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以非特定于编译器的方式更改 Fortran 中的目录 的相关文章

  • Fortran 正在读取超出结束文件记录的内容

    我正在尝试从文件中读取一些数据 而结束文件记录检测对于停止读取非常重要 但是 根据用于读取数据的数组的数组维度 我无法正确检测结束文件记录 并且我的 Fortran 程序停止 程序如下 integer dimension 3 x line
  • #pragma init 和 #pragma fini 在 Linux 上使用 gcc 编译器

    我想构建一些代码 在加载共享库时调用一些代码 我想我会这样做 pragma init my init static void my init do something int add int a int b return a b 所以当我用
  • 在 VSCode Fortran 调试中检查从另一个模块导入的变量

    我正在调试一些包含许多 Fortran 模块的代码 其中一些模块彼此共享变量 不幸的是 带有 VScode 的 gdb 在调试时似乎无法检查导入的变量 目前 当我需要检查导入的变量时 唯一的方法是停止调试 并手动更改代码以包含等于导入变量的
  • 解析 std::type_info::name 的结果

    我目前正在编写一些日志记录代码 这些代码应该 除其他外 打印有关调用函数的信息 这应该是比较容易的 标准C 有一个type info班级 这包含 typeid 类 函数 等的名称 但它已经损坏了 这不是很有用 IE typeid std v
  • malloc和gcc优化2

    while count lt 30000000 malloc 24 count 上面的代码在我用 gcc O0 编译的计算机上运行大约需要 170 毫秒 但是 使用 Ox 其中 x gt 0 进行编译时 优化器会巧妙地发现所请求的内存永远不
  • 在ubuntu中使用gcc生成特定频率的声音?

    如何在 C C 中生成特定频率的声音 我运行 Ubuntu 10 04 并使用 gcc 有一个void sound int frequency Windows 版 TurboC 上的功能 gcc 有等效的吗 下面是利用 PortAudio
  • 如何使用现代 GCC 抑制“-fpermissive”错误?

    我正在尝试编译一些不合格的代码C 17 https en wikipedia org wiki C 2B 2B17 但我遇到了以下问题 pragma GCC diagnostic push pragma GCC diagnostic ign
  • C++11正则表达式匹配[重复]

    这个问题在这里已经有答案了 我正在尝试在 C 11 中进行相当简单的正则表达式匹配 使用 gcc 4 7 2 但我遇到了很多麻烦 尝试使用构建模式 std regex unquoted R regex s s regex 导致构造函数抛出一
  • 带有流星的网站图标?

    我正在尝试将网站图标加载到我的 Meteor 项目中 但无法让它工作 我尝试使用this https stackoverflow com questions 20054788 how to load a favicon with meteo
  • 为什么每次在 GDB 中构建和反汇编函数时都会得到相同的地址?

    每次反汇编函数时 为什么总是得到相同的指令地址和常量地址 例如 执行以下命令后 gcc o hello hello c ggdb gdb hello gdb disassemble main 转储代码将是 当我退出 gdb 并重新反汇编 m
  • FORTRAN:数据多态

    我试图隐藏真实数据类型和复杂数据类型之间的差异 在 FORTRAN 2003 中 我认为可能有一种方法可以做到这一点 目标是定义一个多态可分配数组 其类型可以在运行时决定 另外 还有一个子例程 它使用多态数组来做一些代数 相同的方程适用于真
  • 带有数字/标签的 Fortran IF 语句而不是另一个语句

    这段 Fortran 代码的含义是什么 IF J1 3 20 20 21 21 J1 J1 3 20 IF J2 3 22 22 23 23 J2 J2 3 22 CONTINUE 我在旧项目中看到过 我不知道这个带有数字 标签 的 IF
  • 使用 c11 标准和 clang 来使用 strcpy_s

    我正在运行 OS X Sierra 并尝试编译一个使用的 c 程序strcpy s 但是我安装的 clang 编译器使用的是 c99 标准 但是据我读到的 https embeddedgurus com barr code 2017 08
  • ./configure 使用指定版本的 g++

    如何告诉 配置 文件使用指定版本的 g 进行编译 Thanks 在 bash shell 中 您可以执行以下操作 configure CC gcc 2 95 其他 shell 也会有类似的技术 但我无法帮助您了解具体细节 如果您的项目是 C
  • GCC:分段错误和调试程序仅在优化时崩溃

    这是线程的后续内容 C 分段错误 也许 GDB 在骗我 https stackoverflow com questions 22828609 c segmentation fault and maybe gdb is lying to me
  • 链接器失败:.gnu.linkonce.t

    我在使用 GCC 3 2 3 链接共享库时遇到问题binutils https en wikipedia org wiki GNU Binutils2 18 当我尝试链接库时出现以下错误 gnu linkonce t 在 rodata 节中
  • 由于符号链接错误,无法在 Mac OSX 10.8.1 中安装 ruby​​-1.9.2

    首先 我尝试了常见的rvm安装 rvm安装1 9 2 但是 显示了以下错误 The provided compiler usr bin gcc is LLVM based it is not yet fully supported by r
  • SVN 提交前撤消删除

    如果您从 SVN 工作副本中删除了一个目录 但尚未提交 则如何将其恢复并不明显 当您输入 svn undo d 时 Google 甚至建议将 svn undo delete before commit 作为常见查询 但搜索结果没有任何帮助
  • C 十六进制常数类型

    我写了以下c代码 include
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud

随机推荐

  • 在网格视图内填充下拉列表

    我在 Gridview 中有一个下拉列表 我必须显示与每个 id 关联的记录 并且该 ID 包含超过 10 条记录 那么我如何显示它们 protected void GridView1 RowDataBound object sender
  • libgdx 中四元数的 euler getPitch()、getRoll()、getYaw() 的旋转顺序?

    将四元数转换为欧拉角时 通常必须有轴旋转的顺序 例如这种可视化 http quaternions online libgdx 是如何工作的 四元数类具有以下功能 getRoll Math asin MathUtils clamp 2f w
  • 缩短(限制)句子的长度

    我有一列很长的名字 我想把它们剪到最大40 个字符长度 样本数据 x lt c This is the longest sentence in world so now just make it longer No in fact this
  • 在批处理文件中将反斜杠转换为转发[重复]

    这个问题在这里已经有答案了 将所有反斜杠转换为批处理文件中路径中的转发的最简单方法是什么 因为我需要使用 bash 来执行 SET string D path to folder ECHO string 基本上 您需要首先将字符串值存储到环
  • listadapter 中未调用 DiffCallback

    您好 我正在尝试在我的应用程序中使用 listadapter 和 diffcallback 不知何故 当我做某事时 视图根本不更新 当我将一些日志放入回调内的 areItemsTheSame 和 areContentsTheSame 中时
  • 如何计算工作时间以外的时间

    起初这看起来很简单 但事实证明这是一个真正令人头痛的问题 下面是我的表格 数据 预期输出和 SQL Fiddle 其中我必须解决我的问题 架构和数据 CREATE TABLE IF NOT EXISTS meetings id int 6
  • 如何将 pandas 数据框显示为 Flask-bootstrap 表?

    我想用 Flask 将 pandas 数据框显示为 bootstrap html 表 因此我尝试了以下操作 数据 csv 表 Name Birth Month Origin Age Gender Carly Jan Uk 10 F Rach
  • 如何告诉 NuGet 使用哪些 MSBuild 可执行文件?

    NuGet 显然有一些逻辑来确定要使用哪些 MSBuild 可执行文件 有没有办法覆盖这种行为 或者至少有一种方法告诉它使用 x86 MSBuild 而不是 x64 MSBuild 自动检测 使用 C Program Files x86 M
  • 在 data.frame 中按组显示加权平均值

    有关命令的问题by and weighted mean已经存在 但没有人能够帮助解决我的问题 我是 R 新手 更习惯数据挖掘语言而不是编程 我有一个数据框 其中包含每个人 观察 行 的收入 教育水平和样本权重 我想按教育水平计算收入的加权平
  • 在 Chrome 扩展程序的权限上下文中,“http://*/*”、“https://*/*”和“”意味着什么

    我正在尝试了解 Google Chrome 扩展的工作原理 我正在学习manifest json我遇到权限的文件 http https and
  • 如何挂载 Android 中的电源按钮?

    在 Android 设备上 唯一的按钮是音量按钮和电源按钮 我想让应用程序对按下电源按钮 长按和短按 做出反应 这是怎么做到的 现有的答案并没有完全回答问题 并且遗漏了足够的细节 如果不进行更多调查 它们将无法发挥作用 我将分享我所学到的解
  • 当 GOARCH=386 并导入“C”时,Go 构建错误“构建约束排除所有 Go 文件”

    我正在使用 CGO 包导入 C 代码 我想构建一个x86 386 它的Windows版本 我发现这应该通过设置来完成GOARCH 386 它在我的默认环境设置 GOARCH amd64 上正确构建 但是 当我将环境变量设置为 386 时 出
  • Pandas 正则表达式替换另一列中的值

    我有 2 个 pandas 列 一列有文件路径 另一列有新文件夹名称 我尝试使用正则表达式替换将文件夹名称替换为新文件夹名称 df new path df root str replace r A 0 9 END df new folder
  • SQL Server 中运算符 != 和 <> 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 我应该在 SQL 中使用 或 表示不等于吗 https stackoverflow com questions 723195 should i use or for not equal in tsql
  • 反应切换组件

    我下面有这个简单的代码 当我按下切换按钮时 组件 Child 应该隐藏 显示 但事实并非如此 我需要重新渲染一些东西吗 我不想切换进 出 CSS 类 只需通过单击按钮进行切换 import React Component from reac
  • 如何在调试时将 Visual Studio 异常消息语言更改为英语[重复]

    这个问题在这里已经有答案了 我正在安装 XP 荷兰语版本的机器上工作 Visual Studio 2005 以英文安装 我在调试时遇到了一个恼人的问题 所有 NET Framework 异常消息都以荷兰语显示 这使得它们真的毫无价值 我尝试
  • n阶贝塞尔曲线?

    我已经成功地实现了二次和三次贝塞尔曲线 它们非常简单 因为我们有一个公式 现在我想使用泛化来表示 n 阶贝塞尔曲线 Where and 我使用位图库来渲染输出 所以这是我的代码 binomialCoef n k factorial n fa
  • Google 地图半径到缩放级别

    我有一张地图 上面有一个自定义 UIView 我正在根据缩放级别计算圆的半径 func getCenterCoordinate gt CLLocationCoordinate2D let centerPoint self mapView c
  • char[] 到 uint64_t

    我正在尝试转换数组char into a uint64 t但它不起作用 这是我的代码 char input 8 Initialisation of input int i j uint64 t paquet 0 for i 0 i lt 8
  • 以非特定于编译器的方式更改 Fortran 中的目录

    我希望更改 Fortran 90 代码中的工作目录 是否可以以非特定于编译器的方式执行此操作 这是我的代码 program change directory integer ierr call system mkdir p myfolder