这从MATLAB (7.14) R2012a开始发生,其中三个数据流的环境变量STDIN, STDOUT和STDERR被设置为-1。
为了解决这个问题,你可以将执行FORTRAN脚本的SYSTEM调用包装如下:
setenv (”gfortran_stdin_unit.”,”5”)
setenv (”GFORTRAN_STDOUT_UNIT”,”6”)
setenv (”GFORTRAN_STDERR_UNIT”,”0”)
系统(”myFortranScript”,”-回声”)
setenv (”gfortran_stdin_unit.”,”-1”)
setenv (”GFORTRAN_STDOUT_UNIT”,”-1”)
setenv (”GFORTRAN_STDERR_UNIT”,”-1”)
在任何程序中,都有三个保留流可供程序读写。
'stdin'通常是用作输入流的内容,例如程序当程序要求您在键盘上键入某些内容时。
' stdout '通常用作输出流,例如在FORTRAN中使用WRITE函数时。
”stderr’ is generally what is used as the error stream, which is where a program will write the issues it is encountering, so that a developer or debugger can differentiate between output that is supposed to be seen and errors in the program that are discovered.
gfortran编译的程序尝试打开这三个流,然后在它们完成时无条件地关闭它们。然而,这对于像MATLAB这样的程序来说是一个问题,它干扰用户进程的输入和输出,这些进程也从' stdin ', ' stdout '和' stderr '读取和写入。
因此,从MATLAB(7.14)R2012A向后,默认情况下,这三个环境变量设置为-1。将此设置为-1将确保MATLAB对这些流进行控制,从而允许其正常运行。在运行从MATLAB中需要此访问的Fortran程序时,必须暂时进行这些更改。
当这些变量被设置为-1时,请注意MATLAB将不会从FORTRAN脚本期望写入的' stdout '和' stderr '流中读取,也不会写入脚本期望读取的' stdin '流。这将导致在命令窗口中无法捕获程序的输出。