re PR fortran/43032 (FLUSH: Document that it does not call fsync() but fflush())
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Thu, 10 Jun 2010 19:14:12 +0000 (19:14 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Thu, 10 Jun 2010 19:14:12 +0000 (19:14 +0000)
PR fortran/43032
* intrinsic.texi (FLUSH): Note the difference between FLUSH and
POSIX's fsync(), and how to call the latter from Fortran code.

From-SVN: r160568

gcc/fortran/ChangeLog
gcc/fortran/intrinsic.texi

index acb5fe1e65d6a53373c325aa11f01b1b76133189..87e4c3cbc2527c42243fced80a6e05740fca2215 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-10  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/43032
+       * intrinsic.texi (FLUSH): Note the difference between FLUSH and
+       POSIX's fsync(), and how to call the latter from Fortran code.
+
 2010-06-10  Daniel Franke  <franke.daniel@gmail.com>
 
        PR fortran/44457
index aa3241d6b745fd21b09081e21156d37b9b760657..a24ad91cc2dbe1e9d43840e3df2cae538304f07a 100644 (file)
@@ -4185,6 +4185,44 @@ Subroutine
 Beginning with the Fortran 2003 standard, there is a @code{FLUSH}
 statement that should be preferred over the @code{FLUSH} intrinsic.
 
+The @code{FLUSH} intrinsic and the Fortran 2003 @code{FLUSH} statement
+have identical effect: they flush the runtime library's I/O buffer so
+that the data becomes visible to other processes. This does not guarantee
+that the data is committed to disk.
+
+On POSIX systems, you can request that all data is transferred  to  the
+storage device by calling the @code{fsync} function, with the POSIX file
+descriptor of the I/O unit as argument (retrieved with GNU intrinsic
+@code{FNUM}). The following example shows how:
+
+@smallexample
+  ! Declare the interface for POSIX fsync function
+  interface
+    function fsync (fd) bind(c,name="fsync")
+    use iso_c_binding, only: c_int
+      integer(c_int), value :: fd
+      integer(c_int) :: fsync
+    end function fsync
+  end interface
+
+  ! Variable declaration
+  integer :: ret
+
+  ! Opening unit 10
+  open (10,file="foo")
+
+  ! ...
+  ! Perform I/O on unit 10
+  ! ...
+
+  ! Flush and sync
+  flush(10)
+  ret = fsync(fnum(10))
+
+  ! Handle possible error
+  if (ret /= 0) stop "Error calling FSYNC"
+@end smallexample
+
 @end table