From 21e0620a67e03c10f486249f80903a92483dbeaf Mon Sep 17 00:00:00 2001 From: fxcoudert Date: Thu, 10 Jun 2010 19:14:12 +0000 Subject: [PATCH] PR fortran/43032 * intrinsic.texi (FLUSH): Note the difference between FLUSH and POSIX's fsync(), and how to call the latter from Fortran code. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160568 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/intrinsic.texi | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index acb5fe1e65d..87e4c3cbc25 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-06-10 Francois-Xavier Coudert + + 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 PR fortran/44457 diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index aa3241d6b74..a24ad91cc2d 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -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 -- 2.11.4.GIT