How can I read and write to the standard input, output and error streams stdin, stdout and stderr in Fortran? I’ve heard writing to stderr, for example, used to be write(5, fmt=...), with 5 the unit for stderr, and I know the way to write to stdout is to use write(*, fmt=...).
How do I read and write to the standard input and output units with the ifort compiler?
Compiler version:
Intel(R) Fortran Compiler for applications running on Intel(R) 64, Version 10.0 Build 20070426 Package ID: l_fc_p_10.0.023 Copyright (C) 1985-2007 Intel Corporation. All rights reserved
If you have a Fortran 2003 compiler, the intrinsic module
iso_fortran_envdefines the variablesinput_unit,output_unitanderror_unitwhich point to standard in, standard out and standard error respectively.I tend to use something like
in my input/output routines. Although this of course means preprocessing your source file (to do this with
ifort, use the-fppflag when compiling your source code or change the source file extension from.fto.For from.f90to.F90).An alternative to this would be to write your own, non-intrinsic,
iso_fortran_envmodule (if you don’t have a Fortran 2003 compiler), as discussed here(this link has died since this answer was posted). In this example they use a module:As noted in other answers, 0, 5 and 6 are usually
stderr,stdinandstdout(this is true foriforton Linux) but this is not defined by the Fortran standard. Using theiso_fortran_envmodule is the correct way to portably write to these units.