Buffered input [MinGW/Cygwin]
Angelo Graziosi
angelo.graziosi@alice.it
Sat Aug 14 23:18:00 GMT 2010
Testing the mingw64-i686* packages, found at
ftp://ftp.cygwinports.org/pub/cygwinports/temp/MinGW (Cygwin cross
compiler, see[1]), I have found that the following test case does not
work properly, i.e. as expected.
$ cat test.f90
program test
implicit none
integer, parameter :: MAXLEN = 128
character(len=MAXLEN) :: buf
buf = ''
write(*,'(A)',advance='NO') 'New value: ' ! <== (1)
read(*,'(A)') buf ! <== (2)
print *,buf ! <== (3)
end program test
When I compile it with above compiler [2], I get
$ mingw32-gfortran -O2 -Wall test.f90 -o test_w32
$./test
Here it seems to hang but really it is waiting for input, i.e. it does
not print (1), but waits for (2). If I type
foo<RET>
it prints (1) and (3):
$ ./test_basic_w32
bar <== (2)
New value: bar <== (1), (3)
If, instead, I compile the test with Cygwin GCC-4.3.4 [3],
$ gfortran -O2 -Wall test.f90 -o test_cyg
$ ./test_cyg
New value: abcd<RET> <== (1), (2)
abcd <== (3)
it, corectly, prints (1) and wait for input (2), then, after typing
'abcd<RET>', it prints (3).
Perhaps you may explain what is wrong with my test case using
mingw32-gfortran.
Thanks,
Angelo.
-----
[1] http://cygwin.com/ml/cygwin-apps/2010-07/msg00134.html
[2] $ mingw32-gfortran -v
Using built-in specs.
COLLECT_GCC=mingw32-gfortran
COLLECT_LTO_WRAPPER=/usr/local/mingw-w64/bin/../lib/gcc/i686-w64-mingw32/4.5.1/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with:
/usr/src/ports/devel/mingw64-i686-gcc/mingw64-i686-gcc-4.5.20100708-1/src/gcc-4.5-20100708/configure
--srcdir=/usr/src/ports/devel/mingw64-i686-gcc/mingw64-i686-gcc-4.5.20100708-1/src/gcc-4.5-20100708
--prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin
--libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var
--sysconfdir=/etc --datarootdir=/usr/share
--docdir=/usr/share/doc/mingw64-i686-gcc --build=i686-pc-cygwin
--host=i686-pc-cygwin --target=i686-w64-mingw32
--with-sysroot=/usr/i686-w64-mingw32/sys-root --disable-multilib
--enable-libgomp --enable-lto
--enable-languages=c,c++,fortran,objc,obj-c++
--enable-fully-dynamic-strings --enable-sjlj-exceptions
--enable-version-specific-runtime-libs --with-dwarf2
Thread model: win32
gcc version 4.5.1 20100708 (prerelease) (GCC)
[3] $ gfortran -v
Using built-in specs.
Target: i686-pc-cygwin
Configured with:
/gnu/gcc/releases/packaging/4.3.4-3/gcc4-4.3.4-3/src/gcc-4.3.4/configure
--srcdir=/gnu/gcc/releases/packaging/4.3.4-3/gcc4-4.3.4-3/src/gcc-4.3.4
--prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin
--libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var
--sysconfdir=/etc --infodir=/usr/share/info --mandir=/usr/share/man
--datadir=/usr/share --infodir=/usr/share/info --mandir=/usr/share/man
-v --with-gmp=/usr --with-mpfr=/usr --enable-bootstrap
--enable-version-specific-runtime-libs --with-slibdir=/usr/bin
--libexecdir=/usr/lib --enable-static --enable-shared
--enable-shared-libgcc --disable-__cxa_atexit --with-gnu-ld
--with-gnu-as --with-dwarf2 --disable-sjlj-exceptions
--enable-languages=ada,c,c++,fortran,java,objc,obj-c++ --disable-symvers
--enable-libjava --program-suffix=-4 --enable-libgomp --enable-libssp
--enable-libada --enable-threads=posix --with-arch=i686
--with-tune=generic --enable-libgcj-sublibs CC=gcc-4 CXX=g++-4
CC_FOR_TARGET=gcc-4 CXX_FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake
GNATBIND_FOR_TARGET=gnatbind AS=/opt/gcc-tools/bin/as.exe
AS_FOR_TARGET=/opt/gcc-tools/bin/as.exe LD=/opt/gcc-tools/bin/ld.exe
LD_FOR_TARGET=/opt/gcc-tools/bin/ld.exe
--with-ecj-jar=/usr/share/java/ecj.jar
Thread model: posix
gcc version 4.3.4 20090804 (release) 1 (GCC)
More information about the Fortran
mailing list