爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9917|回复: 8

[经验总结] Fortran之神奇的system与mkdir

[复制链接]

新浪微博达人勋

发表于 2013-7-20 08:51:09 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x

  一直以为Fortran只是长于计算,最近才发现,在Fortran中居然也可以来创建目录或者文件夹,真的是十分神奇,寻根究底才发现是因为Fortran在CVF下面是貌似调用了Windows的API,但是又不敢确定,故发帖以和大家讨论。
  更为神奇的一件事情是,面对众多神奇的程序结果,居然给出了一句中文的提示,况且我也没有命令输出任何结果啊?难道是中文的API吗?


源码如下:
  1. character(len=32)::cmdchar
  2. cmdchar='mkdir .\test'
  3. call system(adjustl(trim(cmdchar)))
  4. end

第一次运行结果正常,当第二次运行的时候出现的一个问题是给出的是中文结果:
“创建的文件夹或者测试版目录已存在” 而且是中文的,难道是调用的中文的API 吗?
哦,对了,平台是 Windows-CVF-Fortran6.6 测试版
求正解

密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-7-20 10:41:04 | 显示全部楼层
请参考我之前发的fortran批处理的帖子吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-20 10:45:47 | 显示全部楼层
是的。确实可以。读写文件就能看出来的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-20 13:53:35 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-20 13:54:24 | 显示全部楼层
mofangbao 发表于 2013-7-20 10:41
请参考我之前发的fortran批处理的帖子吧

嗯,的确是受到学长的那个帖子和其余的一些资料的启发,但是为什么是中文的?不应该是英文的?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-20 14:10:52 | 显示全部楼层
mofangbao 发表于 2013-7-20 10:41
请参考我之前发的fortran批处理的帖子吧

http://bbs.06climate.com/home.ph ... ;do=blog&id=127
这个地址也挺好的,可以给出当下目录的所有文件呢,十分强大啊。
不过还是回到之前的这个帖子:
http://wenku.baidu.com/view/b18a2627ccbff121dd368335.html
这个是放在百度文库里面的,不知道气象家园的帖在哪呢,找不着啊。
学长分析的是比较系统也相对比较复杂的如何得出当前目录下的文件名以及如何创建文件目录,但是在这个帖子中给出的命令行是十分的简单,只是涉及到system和mkdir,在次学长并没有提及,而且就是简单的两个命令,那中文是从API的借口而来吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-7-20 14:42:41 | 显示全部楼层
家园的链接在这里,你要多学着用搜索  搜索 “fortran 批处理”就有了,在搜索结果第一页下面一点
http://bbs.06climate.com/forum.php?mod=viewthread&tid=3079
楼主所提到的并不是什么神奇的功能,调用的call system只是cvf给你提供的一个函数而已,和你自己写的subroutine是一样的意思,至于所以 mkdir也不是cvf的fortran提供的什么功能,纯粹是借着system这个函数执行了一次cmd的命令而已,给出的中文提示也是这个cmd的执行结果,和你在cmd窗口下执行mkdir提示的东西是类似的,不知道楼主用过grads没有,这个和grads中加“!”来运行cmd命令是一个意思。
除了system函数,cvf还提供了其他很多和windows api类似功能的函数,其本质也是cvf对windows的api进行了封装,然后把封装好的函数给你call。至于他是如何封装的,你不需要知道,也许别人直接用c/c++或者汇编做的,fortran90语言本身并没有相关的定义。
遇到问题思考是好的,要注意看本质,如果只看到现象,别人写个 del命令你又会觉得神奇了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-20 19:24:10 | 显示全部楼层

截图

截图


  我试着在Windows下的环境中验证了相关的指令,即mkdir,果然是这个原理呢,就是调用了命令行窗口的指令。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-20 19:28:24 | 显示全部楼层
mofangbao 发表于 2013-7-20 14:42
家园的链接在这里,你要多学着用搜索  搜索 “fortran 批处理”就有了,在搜索结果第一页下面一点
http:// ...

原因应该是这样的:
Fortran中system提供的功能正如清风学长所说,间接的调用命令行的指令,即实现了在Fortran的环境中调用Windows自己的指令,至于为什么是中文的提示,是因为本系统是Windows7中文版的,所以给出的肯定就是中文的回复,然后就是system函数将Windows的反馈返回到了Fortran的控制台,所以在Fortran的控制台会出现相应的结果,证毕。
多谢清风学长的指教。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表