Patchwork [fortran,docs] Unformatted sequential and special files

login
register
mail settings
Submitter Thomas Koenig
Date Aug. 30, 2013, 5:18 p.m.
Message ID <5220D3E4.2010905@netcologne.de>
Download mbox | patch
Permalink /patch/271383/
State New
Headers show

Comments

Thomas Koenig - Aug. 30, 2013, 5:18 p.m.
Hello world,

the attached patch documents the format for unformatted sequential
files and what is, and is not, supported with special files.

Tested with "make dvi" and "make info".  OK for trunk?

	Thomas

2013-08-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

        PR fortran/30162
        * gfortran.texi:  Document unformatted sequential file format
        and I/O with special files.
Janne Blomqvist - Aug. 31, 2013, 8:15 p.m.
On Fri, Aug 30, 2013 at 8:18 PM, Thomas Koenig <tkoenig@netcologne.de> wrote:
> Hello world,
>
> the attached patch documents the format for unformatted sequential
> files and what is, and is not, supported with special files.
>
> Tested with "make dvi" and "make info".  OK for trunk?

The unformatted sequential format part looks Ok, but the special files
section is lacking. E.g. what about

- The REWIND statement?
- The ENDFILE statement?
- ACCESS='stream' and the POS= specifier?
- ACCESS='direct'? (I suspect this should work for
pipes/FIFO's/terminals in case REC= numbers are sequential, but is
that a guarantee we want to make?)
- Special files which are special in other ways. E.g. block special
files tend to allow seeking, but IO must be block aligned.

>
>         Thomas
>
> 2013-08-30  Thomas Koenig  <tkoenig@gcc.gnu.org>
>
>         PR fortran/30162
>         * gfortran.texi:  Document unformatted sequential file format
>         and I/O with special files.

Patch

Index: gfortran.texi
===================================================================
--- gfortran.texi	(Revision 201996)
+++ gfortran.texi	(Arbeitskopie)
@@ -1121,6 +1121,8 @@ 
 * Internal representation of LOGICAL variables::
 * Thread-safety of the runtime library::
 * Data consistency and durability::
+* Unformatted sequential file format::
+* I/O with special files::
 @end menu
 
 
@@ -1291,7 +1293,75 @@ 
 releasing @code{fcntl} file locks, if the server supports them, will
 also force cache validation and flushing dirty data and metadata.
 
+@node Unformatted sequential file format
+@section Unformatted sequential file format
+@cindex unformatted sequential files
+@cindex record marker
+@cindex subrecord
 
+Unformatted sequential files are stored using record markers. Each
+full record consists of a leading record marker, the data written
+by the user program, and a trailing record marker.  The record markers
+are four-byte integers by default, and eight-byte integers if the
+@option{-fmax-subrecord-length=8} option is in effect. Each record
+marker contains the number of bytes of data in the record.
+
+The maximum number of bytes of user data in a record is 2147483639 for
+a four-byte record marker. If this is exceeded, a record is split into
+subrecords. Each subrecord also has a leading and a trailing record
+marker. If the leading record marker contains a negative number, the
+number of user data bytes in the subrecord equals the absolute value
+of this number, and another subrecord follows the current one.  If the
+trailing record marker contains a negative number, then the number of
+bytes of user data equals the absolute value of that number, and there
+is a preceding subrecord.
+
+The format for unformatted sequential data can be duplicated using
+unformatted stream, as shown in this example program:
+
+@smallexample
+program main
+  implicit none
+  integer :: i
+  real, dimension(10) :: a, b
+  call random_number(a)
+  open (10,file='test.dat',form='unformatted',access='stream')
+  inquire (iolength=i) a
+  write (10) i, a, i
+  close (10)
+  open (10,file='test.dat',form='unformatted')
+  read (10) b
+  if (all (a == b)) print *,'success!'
+end program main
+@end smallexample
+
+@node I/O with special files
+@section I/O with special files
+@cindex special files
+@cindex pipes
+@cindex FIFO
+@cindex terminal devices
+@cindex BACKSPACE
+
+Special files such as pipes, FIFOs or terminal devices are supported
+only for the following types of file access:
+
+@itemize
+
+@item Formatted sequential
+
+@item Formatted stream
+
+@item Unformatted stream
+
+@end itemize
+
+Unformatted sequential file access is not supported for
+special files.  If necessary, it can be simulated using
+unformatted stream, see @ref{Unformatted sequential file format}.
+
+@code{BACKSPACE} is not supported for special files.
+
 @c ---------------------------------------------------------------------
 @c Extensions
 @c ---------------------------------------------------------------------