Commit da12c997 by Francois-Xavier Coudert Committed by François-Xavier Coudert

re PR fortran/43032 (FLUSH: Document that it does not call fsync() but fflush())

	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
parent 84efddb2
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
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment