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