home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / p_man / cat3 / f90 / intro_ffio.z / intro_ffio
Encoding:
Text File  |  2002-10-03  |  46.4 KB  |  941 lines

  1. INTRO_FFIO(3F)                                         Last changed: 3-1-99
  2.  
  3.  
  4. NNAAMMEE
  5.      IINNTTRROO__FFFFIIOO - Describes performance options available with the FFIO
  6.      layers
  7.  
  8. IIMMPPLLEEMMEENNTTAATTIIOONN
  9.      See individual man pages for implementation details.
  10.  
  11. DDEESSCCRRIIPPTTIIOONN
  12.      The Flexible File I/O (FFIO) system lets the user specify a comma-
  13.      separated list of layers through which I/O data is to be passed.  This
  14.      is done by providing a value for the _s_p_e_c argument to the --FF option on
  15.      the aassssiiggnn(1) command.  This specifies a _c_l_a_s_s of processing to be
  16.      done on the data.
  17.  
  18.      The following C routines are used with FFIO:
  19.  
  20.      * ffffffccnnttll(3C):  performs functions on files opened using FFIO
  21.  
  22.      * fffflliissttiioo(3C):  initiates a list of I/O requests using FFIO
  23.  
  24.      * ffffiioolloocckk(3C):  locks and unlocks function calls
  25.  
  26.      * ffffooppeenn(3C):  opens or closes a file using FFIO
  27.  
  28.      * ffffppooss(3C):  positions files opened using FFIO
  29.  
  30.      * ffffrreeaadd(3C):  reads from a file using FFIO
  31.  
  32.      * ffffrreeaaddaa(3C):  provides asynchronous read using FFIO
  33.  
  34.      * ffffsseeeekk(3C):  repositions a FFIO file
  35.  
  36.      * ffffwwrriitteeaa(3C):  provides asynchronous write using FFIO
  37.  
  38.      * ffffsseettsspp(3C):  initiates EOV processing for files opened using FFIO
  39.  
  40.      * ffffwwrriittee(3C): writes to a file using FFIO
  41.  
  42.    FFFFIIOO oonn IIRRIIXX ssyysstteemmss
  43.      The default layer for direct access on IRIX systems is the ccaacchhee layer
  44.      and it does not have the coherency to handle multiple processes doing
  45.      I/O to the same file.  The user must assign the direct access file to
  46.      either the ssyysstteemm or gglloobbaall layer for programs to work as expected
  47.      with more than one process.
  48.  
  49.      On IRIX systems, the FFIO library calls aaiioo__ssggii__iinniitt the first time it
  50.      issues an asynchronous I/O call.  It passes the following parameters
  51.      to aaiioo__ssggii__iinniitt:
  52.  
  53.           aio_numusers=MAX(64,sysconf(_SC_NPROC_CONF))
  54.           aio_threads=5
  55.           aio_locks=3
  56.  
  57.      If a program is using multiple threads and asychronous I/O, it is
  58.      important that the value of aaiioo__nnuummuusseerrss be at least as large as the
  59.      number of sprocs and pthreads that the application contains.  For more
  60.      information, see the aaiioo__ssggii__iinniitt man page on IRIX systems.
  61.  
  62.      Users can change these values by setting the following environment
  63.      variables to the desired value:
  64.  
  65.      * change FFFF__IIOO__AAIIOO__TTHHRREEAADDSS to modify aaiioo__tthhrreeaaddss
  66.  
  67.      * change FFFF__IIOO__AAIIOO__LLOOCCKKSS to modify aaiioo__lloocckkss
  68.  
  69.      * change FFFF__IIOO__AAIIOO__NNUUMMUUSSEERRSS to modify aaiioo__nnuummuusseerrss
  70.  
  71.      The following example causes aaiioo__tthhrreeaaddss to be set to 8 when the FFIO
  72.      routines call aaiioo__ssggii__iinniitt:
  73.  
  74.           setenv FF_IO_AIO_THREADS 8
  75.  
  76.      Users can also supersede the FFIO library's call to aaiioo__ssggii__iinniitt by
  77.      calling it themselves, before the first I/O statement in their
  78.      program.
  79.  
  80.      The following layers can issue asynchronous I/O calls on IRIX systems:
  81.  
  82.      * ccooss: see the later description on this man page for a description of
  83.        how the ccooss layer uses asynchronous I/O.
  84.  
  85.      * ccaacchheeaa and bbuuffaa: users should assume that these layers may issue
  86.        asynchronous I/O calls.
  87.  
  88.      * ssyysstteemm or ssyyssccaallll: these layers may issue asynchronous I/O calls if
  89.        called from a BBUUFFFFEERR IINN or BBUUFFFFEERR OOUUTT statement, or from the ccooss or
  90.        ccaacchheeaa layer.  The ssyysstteemm and ssyyssccaallll layer may also issue
  91.        asynchronous I/O calls if called via ffffrreeaaddaa(3C), ffffwwrriitteeaa(3C), or
  92.        fffflliissttiioo(3C) (all deferred on IRIX systems).
  93.  
  94.    SSppeecciiffyyiinngg FFFFIIOO LLaayyeerrss
  95.      The _s_p_e_c argument of the --FF option of the aassssiiggnn(1) command comprises
  96.      a list of layers or filters that are used to manipulate the data file
  97.      as it is being read or written.  The available layers include
  98.      performance options (such as memory-resident and SDS-resident files)
  99.      and the capability to read and write files in a variety of different
  100.      vendors' blocking formats.  Each layer _s_p_e_c is of the general form:
  101.  
  102.           _c_l_a_s_s[._t_y_p_e[._s_u_b_t_y_p_e]][:_n_u_m_1]:[_n_u_m_2]:[_n_u_m_3]]
  103.  
  104.      Many of the layers also allow you to specify the numeric parameters
  105.      with a keyword.  On UNICOS and UNICOS/mk systems, this requires that
  106.      your application be linked with Cray Research's CrayLibs 3.0 or later
  107.      releases.  The format for these specifications is given in the
  108.      description of each layer where the specification is available.
  109.  
  110.      Selected layers are available on IRIX systems.  The available
  111.      platforms are detailed in each layer's description.
  112.  
  113.      For more information about FFIO, see the _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O
  114.      _G_u_i_d_e.
  115.  
  116.      The _s_p_e_c argument can have the following values:
  117.  
  118.      CCllaassss         EExxppllaannaattiioonn
  119.  
  120.      bbllaannkkxx  or  bbllxx
  121.                    Blank compression filter.  This layer is used as a
  122.                    filter to compress or decompress blanks in character
  123.                    data.
  124.  
  125.                    Not available on IRIX systems.
  126.  
  127.                    _t_y_p_e can be one of the following:
  128.  
  129.                    ccooss  COS-style blank compression (bbllxxcchhrr=27 or Ox10)
  130.  
  131.                    ccttssss CTSS-style blank compression (bbllxxcchhrr=48 or 0x30)
  132.  
  133.                    cc220055 CYBER 205-style blank compression (bbllxxcchhrr=48 or
  134.                         0x30)
  135.  
  136.                    _n_u_m_1 is the decimal value of the ASCII character used as
  137.                    the escape code to control the blank compression
  138.                    (usually EESSCC or 27).  _n_u_m_2 is the decimal value of the
  139.                    ASCII character that is the object of the compression
  140.                    (usually BBLLAANNKK or 32).
  141.  
  142.                    You can specify the numeric parameters with this
  143.                    alternate keyword syntax:
  144.  
  145.                    bbllxx[[.._t_y_p_e]][[..bbllxxcchhrr==_n_u_m_1]][[..bbllnnkk==_n_u_m_2]]
  146.  
  147.                    bbllaannkkxx[[.._t_y_p_e]][[..bbllxxcchhrr==_n_u_m_1]][[..bbllnnkk==_n_u_m_2]]
  148.  
  149.      bbmmxx           Tape I/O.  Each logical record requested is a physical
  150.                    tape block.
  151.  
  152.                    Deferred implementation on IRIX systems.
  153.  
  154.                    The _n_u_m_1 field represents the size of each buffer, in
  155.                    4096-byte blocks.  The _n_u_m_2 field represents the number
  156.                    of buffers.
  157.  
  158.                    On UNICOS systems, files on ER90 volumes that have been
  159.                    mounted in blocked mode may use this layer (see the _T_a_p_e
  160.                    _S_u_b_s_y_s_t_e_m _U_s_e_r'_s _G_u_i_d_e, for information about
  161.                    restrictions on record sizes when using ER90 block
  162.                    mode).
  163.  
  164.                    You can specify the numeric parameters with this
  165.                    alternate keyword syntax:
  166.  
  167.                    bbmmxx[[..bbuuffssiizzee==_n_u_m_1]][[..nnuumm__bbuuffffeerrss==_n_u_m_2]]
  168.  
  169.      bbuuffaa          Asynchronous buffering layer.
  170.  
  171.                    Available on IRIX systems.
  172.  
  173.                    The bbuuffaa layer provides asynchronous buffering.  It
  174.                    allows efficient sequential-access I/O.
  175.  
  176.                    The _n_u_m_1 field represents the size in 4096-byte blocks
  177.                    of each buffer.  The maximum value for _n_u_m_1 on IRIX
  178.                    systems is 32,767.  The maximum allowed value on UNICOS
  179.                    and UNICOS/mk systems is 1,073,741,823 (you may not be
  180.                    able to use a value of this size because that amount of
  181.                    memory may not be available).
  182.  
  183.                    The _n_u_m_2 field selects the number of buffers to be used.
  184.  
  185.                    You can specify the numeric parameters with this
  186.                    alternate keyword syntax:
  187.  
  188.                    bbuuffaa[[..bbuuffssiizzee==_n_u_m_1]][[..nnuumm__bbuuffffeerrss==_n_u_m_2]]
  189.  
  190.      cc220055          CDC CYBER 205/ETA records.
  191.  
  192.                    Not available on IRIX systems.
  193.  
  194.                    The CYBER 205-type W record can be selected by
  195.                    specifying cc220055..ww.  The _n_u_m_1 field is not permitted.
  196.                    The _n_u_m_2 field represents the size of the working
  197.                    buffer, in bytes, used in record blocking.  If any
  198.                    logical records written exceed this size, a major
  199.                    performance penalty can result.
  200.  
  201.                    The _t_y_p_e field should be specified as ww.  The best
  202.                    performance is currently obtained when _n_u_m_2 is greater
  203.                    than the largest record to be processed plus 16 bytes.
  204.  
  205.                    You can specify the numeric parameters with this
  206.                    alternate keyword syntax:
  207.  
  208.                    cc220055[[..ww]][[..bbuuffssiizzee==_n_u_m_2]]
  209.  
  210.      ccaacchhee         Cached file.  The ccaacchhee layer allows efficient
  211.                    random-access I/O, even when file access is clustered in
  212.                    several regions of a file.
  213.  
  214.                    Available on IRIX systems.
  215.  
  216.                    During reads and writes to the layer, cache buffers
  217.                    frequently must be preempted.  The buffer chosen for
  218.                    preemption is always the least recently accessed buffer
  219.                    at the time of preemption.
  220.  
  221.                    The options available are ..mmeemm, which specifies that
  222.                    buffers reside in memory or ..ssddss, which specifies that
  223.                    buffers reside in the SDS.  (..ssddss is not supported on
  224.                    CRAY T3E systems or IRIX systems).  Memory-resident
  225.                    buffers are the default.
  226.  
  227.                    The numeric fields are as follows:
  228.  
  229.                    * _n_u_m_1 is the size in 4096-byte blocks of each cache
  230.                      page.  The maximum value for _n_u_m_1 on IRIX systems is
  231.                      32,767.  The maximum allowed value on UNICOS and
  232.                      UNICOS/mk systems is 1,073,741,823 (you may not be
  233.                      able to use a value of this size because that amount
  234.                      of memory may not be available).
  235.  
  236.                    * _n_u_m_2 selects the number of cache pages to be used.
  237.  
  238.                    * _n_u_m_3 is the size in 4096-byte blocks at which the
  239.                      ccaacchhee layer attempts to bypass ccaacchhee layer buffering.
  240.                      If a user's I/O request is larger than _n_u_m_3, the
  241.                      request might not be copied to a cache page.  The
  242.                      default on IRIX systems is _n_u_m_3=_n_u_m_1.  The default on
  243.                      UNICOS and UNICOS/mk systems is _n_u_m_3=_n_u_m_1*_n_u_m_2.
  244.  
  245.                    You can specify the numeric parameters with this
  246.                    alternate keyword syntax:
  247.  
  248.                    ccaacchhee[[.._t_y_p_e]][[..ppaaggee__ssiizzee==_n_u_m_1]][[..nnuumm__ppaaggeess==_n_u_m_2]]
  249.                    [[..bbyyppaassss__ssiizzee==_n_u_m_3]]
  250.  
  251.      ccaacchheeaa        Asynchronously cached file.
  252.  
  253.                    Available on IRIX systems.
  254.  
  255.                    This type of processing usually performs well whenever
  256.                    the ccaacchhee layer might be used.  In addition, any
  257.                    sequential forward and sequential backward access
  258.                    through the file is detected.  When sequential access
  259.                    patterns are detected while reading, asynchronous
  260.                    read-ahead is performed provided that the numbers of
  261.                    pages to read ahead has been specified.  When writing,
  262.                    selective asynchronous write-behind is performed.
  263.  
  264.                    The values for _t_y_p_e are ..mmeemm, which specifies that
  265.                    buffers reside in memory, or ..ssddss, which specifies that
  266.                    buffers reside in the SDS (..ssddss is not supported on
  267.                    CRAY T3E systems or on IRIX systems).  Memory-resident
  268.                    buffers are the default.
  269.  
  270.                    The numeric fields are as follows:
  271.  
  272.                    * _n_u_m_1 is the size in 4096-byte blocks of each cache
  273.                      page.  The maximum value for _n_u_m_1 on IRIX systems is
  274.                      32,767.  The maximum allowed value on UNICOS and
  275.                      UNICOS/mk systems is 1,073,741,823 (you may not be
  276.                      able to use a value of this size because that amount
  277.                      of memory may not be available).
  278.  
  279.                    * _n_u_m_2 selects the number of cache pages to be used.
  280.  
  281.                    * _n_u_m_3 selects the number of pages to read ahead
  282.                      asynchronously.  The default is 0.
  283.  
  284.                    * _n_u_m_4 selects a shared cache number in the range of 1
  285.                      to 15.  If _n_u_m_4 is 0, a private cache is indicated.
  286.  
  287.                    You can specify the numeric parameters with this
  288.                    alternate keyword syntax:
  289.  
  290.                    ccaacchheeaa[[.._t_y_p_e]][[..ppaaggee__ssiizzee==_n_u_m_1]][[..nnuumm__ppaaggeess==_n_u_m_2]]
  291.                    [[..mmaaxx__lleeaadd==_n_u_m_3]][[..sshhaarreedd__ccaacchhee==_n_u_m_4]]
  292.  
  293.                    On IRIX systems, stacked shared ccaacchheeaa layers are not
  294.                    supported.
  295.  
  296.                    On UNICOS and UNICOS/mk systems, stacked shared ccaacchheeaa
  297.                    layers are supported, but in multitasked programs,
  298.                    different files must not mix the order of the shared
  299.                    caches.
  300.  
  301.                    Examples:
  302.  
  303.                    The following specifications ccaannnnoott both be used by a
  304.                    multitasked program:
  305.  
  306.                    * aassssiiggnn --FF ccaacchheeaa::::::::11,,ccaacchheeaa::::::::22 uu::11
  307.  
  308.                    * aassssiiggnn --FF ccaacchheeaa::::::::22,,ccaacchheeaa::::::::11 uu::22
  309.  
  310.                    The following specifications ccaann both be used by a
  311.                    multitasked program on a UNICOS system:
  312.  
  313.                    * aassssiiggnn --FF ccaacchheeaa::::::::11,,ccaacchheeaa::::::::22 uu::11
  314.  
  315.                    * aassssiiggnn --FF ccaacchheeaa::::::::11,,ccaacchheeaa::::::::22 uu::22
  316.  
  317.      ccddcc           CDC 60-bit format _t_y_p_e.
  318.  
  319.                    Not available on IRIX systems.
  320.  
  321.                    No numeric fields are accepted.
  322.  
  323.                    The supported values for _t_y_p_e are as follows:
  324.  
  325.                    _t_y_p_e    FFoorrmmaatt
  326.  
  327.                    iiww      I-type blocks, W-type records
  328.  
  329.                    ccww      C-type blocks, W-type records
  330.  
  331.                    ccss      C-type blocks, S-type records
  332.  
  333.                    cczz      C-type blocks, Z-type records
  334.  
  335.                    The _s_u_b_t_y_p_e field accepts one of the following values
  336.                    that indicate the presence of block trailers and other
  337.                    low-level characteristics:
  338.  
  339.                    _s_u_b_t_y_p_e    VVaalluuee
  340.  
  341.                    ddiisskk       Disk type structure, for use with station
  342.                               transfers of CYBER datasets
  343.  
  344.                    ii          NOS internal tape format
  345.  
  346.                    ssii         System internal or SCOPE internal tape format
  347.  
  348.      ccooss or bblloocckkeedd
  349.                    COS blocking.
  350.  
  351.                    Available on IRIX systems.
  352.  
  353.                    If specified, _t_y_p_e must be one of the following:
  354.  
  355.                    _t_y_p_e       AAccttiioonn
  356.  
  357.                    ssyynncc       Uses a single buffer in the blocking and
  358.                               deblocking process.  I/O is done strictly
  359.                               synchronously.
  360.  
  361.                    aassyynncc      Divides the buffer into two parts and uses
  362.                               asynchronous I/O to transfer the blocked data
  363.                               between the buffer(s) and the logical device.
  364.                               When reading, asynchronous read-ahead is
  365.                               performed, and when writing, asynchronous
  366.                               write-behind is performed.  To effectively
  367.                               use aassyynncc, the buffer size should be at least
  368.                               twice the record length.
  369.  
  370.                    aauuttoo       Default (if _t_y_p_e is not specified).  Chooses
  371.                               either synchronous or asynchronous behavior
  372.                               depending on the buffer size.  If the buffer
  373.                               size is less than 64 blocks, synchronous
  374.                               behavior is selected.  If it is greater than
  375.                               or equal to 64 blocks, asynchronous behavior
  376.                               is selected.
  377.  
  378.                    For _n_u_m_1, enter the desired buffer size in 4096-byte
  379.                    blocks (for example, --FF ccooss::4422 requests COS blocking and
  380.                    a 42-block buffer).  The _n_u_m_1 value also determines the
  381.                    record size for underlying layers which perform record
  382.                    blocking.  The underlying record size is _n_u_m_1 blocks if
  383.                    in synchronous mode and _n_u_m_1/2 or _n_u_m_1/2+1 blocks if in
  384.                    asynchronous mode.  For an underlying tape layer, the
  385.                    record size is the tape block size.
  386.  
  387.                    MIPSpro 7.3/PE 3.3 release: If not specified, the
  388.                    default buffer size is the larger of the following: the
  389.                    large I/O size (UNICOS and UNICOS/mk systems only), the
  390.                    preferred I/O block size (see the ssttaatt(2) man page), or
  391.                    48 blocks.  Furthermore, if _t_y_p_e is aauuttoo (the default),
  392.                    then the default buffer size is doubled if asynchronous
  393.                    mode is used (the ccooss layer automatically switches to
  394.                    asynchronous mode).
  395.  
  396.                    You can specify the numeric parameters with this
  397.                    alternate keyword syntax:
  398.  
  399.                    ccooss[[.._t_y_p_e]][[..bbuuffssiizzee==_n_u_m_1]]
  400.  
  401.      eerr9900          ER90 I/O.
  402.  
  403.                    Not available on IRIX systems or on CRAY T3E systems.
  404.  
  405.                    Each I/O operation results in a corresponding system
  406.                    call.  Adjacent records are not delimited from one
  407.                    another.  No subfields are accepted.  The byte-stream
  408.                    mode of the device must be used.  See ttppmmnntt(1).
  409.  
  410.      eevveenntt         I/O layer monitoring.
  411.  
  412.                    Available on IRIX systems.
  413.  
  414.                    The eevveenntt layer monitors I/O occurring between two
  415.                    layers on a per-file basis.  This layer generates
  416.                    statistics in an ASCII log file; users can specify what
  417.                    type of report is generated.  The eevveenntt layer is enabled
  418.                    by default.  Users do not have to relink their programs
  419.                    to study I/O performance.  To generate information,
  420.                    rerun the program with the eevveenntt layer specified on the
  421.                    aassssiiggnn command.
  422.  
  423.                    Statistics are reported to ssttddeerrrr by default.  The
  424.                    FFFF__IIOO__LLOOGGFFIILLEE environment variable can be used to name a
  425.                    file to which statistics are written by the eevveenntt layer.
  426.                    The default action is to overwrite the existing file.
  427.                    To append information to an existing file, specify a
  428.                    plus sign (++) before the file name.
  429.  
  430.                    The eevveenntt layer reports counts for rreeaadd, rreeaadd, wwrriittee,
  431.                    and wwrriitteeaa.  These counts represent the number of calls
  432.                    made to to an FFIO layer entry point.  In some cases,
  433.                    the ssyysstteemm layer may actually use a different I/O system
  434.                    call, or multiple system calls. For example, the rreeaaddaa
  435.                    system call does not exist on IRIX systems, and the
  436.                    ssyysstteemm layer rreeaaddaa entry point will use aaiioo__rreeaadd(()).
  437.  
  438.                    On IRIX systems, the report that is generated may
  439.                    include mention of the "lock" layer, even though the
  440.                    lock layer may not have been specified by the user.
  441.  
  442.                    On CRAY T3E systems, if more than one process is using
  443.                    the eevveenntt layer, and you set the FFFF__IIOO__LLOOGGFFIILLEE
  444.                    environment variable, you must use the plus sign (++)
  445.                    before the file name to prevent  _p_r_o_c_e_s_s _a from
  446.                    overwriting the information written by _p_r_o_c_e_s_s _b.  Using
  447.                    the plus sign also means that the information will be
  448.                    appended to an existing file.
  449.  
  450.                    On CRAY T3E systems you can also use the FFFF__IIOO__LLOOGGFFIILLEEPPEE
  451.                    environment variable to name a file to which statistics
  452.                    are written.  The file name will be _x._n, where _x is the
  453.                    name specified by the environment variable and _n is the
  454.                    number of the PE which wrote the file.  The default
  455.                    action is to overwrite the existing file.  To append
  456.                    information to the existing file, specify a plus sign
  457.                    (++) before the file name.
  458.  
  459.                    Enter one of the following for _t_y_p_e:
  460.  
  461.                    vvaalluuee          IInnffoorrmmaattiioonn rreeppoorrtteedd
  462.  
  463.                    nnoossttaatt         No statistical information is reported.
  464.  
  465.                    ssuummmmaarryy        Information on event types that occur at
  466.                                   least once are reported.
  467.  
  468.                    bbrriieeff          A one-line summary for layer activities
  469.                                   is reported.
  470.  
  471.      ff7777           FORTRAN 77/UNIX Fortran record blocking.  This is the
  472.                    common blocking format used by most FORTRAN 77 compilers
  473.                    on UNIX systems.
  474.  
  475.                    Available on IRIX systems.
  476.  
  477.                    Enter one of the following for _t_y_p_e:
  478.  
  479.                    _t_y_p_e      FFoorrmmaatt
  480.  
  481.                    nnoonnvvaaxx    Default.  Control words in a format common to
  482.                              machines such as the MC68000.
  483.  
  484.                    vvaaxx       VAX format (byte-swapped) control words.  Not
  485.                              available on IRIX systems.
  486.  
  487.                              The specification of vvaaxx or nnoonnvvaaxx is not
  488.                              relevant to data conversion.
  489.  
  490.                    For _n_u_m_1, enter the maximum record size in bytes.  For
  491.                    _n_u_m_2, enter the working buffer size, in bytes.
  492.  
  493.                    You can specify the numeric parameters with this
  494.                    alternate keyword syntax:
  495.  
  496.                    ff7777[[.._t_y_p_e]][[..rreeccssiizzee==_n_u_m_1]][[..bbuuffssiizzee==_n_u_m_2]]
  497.  
  498.      ffdd            Connect to a specific file descriptor.
  499.  
  500.                    Available on IRIX systems.
  501.  
  502.                    Field _n_u_m_1 is the decimal value of the file descriptor.
  503.                    Classes named ssttddiinn, ssttddoouutt, and ssttddeerrrr exist as
  504.                    alternate names for ffdd::00, ffdd::11, and ffdd::22.
  505.  
  506.                    You can specify the numeric parameters with this
  507.                    alternate keyword syntax:
  508.  
  509.                    ffdd[[..ffiillee__ddeessccrriippttoorr==_n_u_m_1]]
  510.  
  511.      gglloobbaall        File global to all processes.
  512.  
  513.                    Available on IRIX systems.
  514.  
  515.                    This is a caching layer which distributes the cache
  516.                    across multiple SHMEM or MPI processes.  Open and close
  517.                    operations are collective (require participation by all
  518.                    processes which access the file).  All other operations
  519.                    are independently performed by one or more processes.
  520.                    The library allows multiple processes to concurrently
  521.                    access the file while maintaining coherency of buffered
  522.                    data.
  523.  
  524.                    Specify one of the following options for _t_y_p_e:
  525.  
  526.                    _t_y_p_e           DDeessccrriippttiioonn
  527.  
  528.                    pprriivvppooss        Default.  The file position is private to
  529.                                   a process.  All processes may seek to
  530.                                   independent locations in the file.
  531.  
  532.                    gglloobbppooss        (Deferred).  The file position is global
  533.                                   to all processes.  A seek or I/O
  534.                                   operation by any process will affect the
  535.                                   position for all processes.
  536.  
  537.                    The numeric fields are as follows:
  538.  
  539.                    _n_u_m_1 The size in 4096-byte blocks of each cache page.
  540.  
  541.                    _n_u_m_2 Selects the number of cache pages to be used on
  542.                         each process.  If there are _n processes, then _n *
  543.                         _n_u_m_2 cache pages are used.
  544.  
  545.                    _n_u_m_2 buffer pages are allocated on every process which
  546.                    shares access to a global file.  File pages are direct-
  547.                    mapped onto processes such that page _n of the file will
  548.                    always be cached on process (_n mmoodd NNPPEESS), where NNPPEESS is
  549.                    the total number of processes sharing access to the
  550.                    global file.  Once the process is identified where
  551.                    caching of the file page will occur, a least-recently-
  552.                    used method is used to assign the file page to a cache
  553.                    page within the caching process.
  554.  
  555.                    You can specify the numeric parameters with this
  556.                    alternate keyword syntax:
  557.  
  558.                    gglloobbaall[[.._t_y_p_e]][[..ppaaggee__ssiizzee==_n_u_m_1]][[..nnuumm__ppaaggeess==_n_u_m_2]]
  559.  
  560.      iibbmm           Record blocking for common record types on IBM operating
  561.                    systems.
  562.  
  563.                    Deferred implementation on IRIX systems.
  564.  
  565.                    Specify one of the following record formats for _t_y_p_e:
  566.  
  567.                    _t_y_p_e   FFoorrmmaatt
  568.  
  569.                    ff      Fixed-length record format.  For _n_u_m_1, enter the
  570.                           logical record size in 8-bit bytes.  For _n_u_m_2,
  571.                           enter the maximum physical block size in 8-bit
  572.                           bytes; if specified, _n_u_m_2 must be equal to _n_u_m_1.
  573.  
  574.                    ffbb     Fixed-length, blocked record format.  For _n_u_m_1,
  575.                           enter the logical record size in 8-bit bytes.
  576.                           For _n_u_m_2, enter the maximum physical block size
  577.                           in 8-bit bytes; _n_u_m_2 must be an exact multiple of
  578.                           _n_u_m_1.
  579.  
  580.                    uu      Undefined record format.  For _n_u_m_1, enter the
  581.                           maximum record size, in 8-bit bytes.
  582.  
  583.                    vv      Variable length record format.  For _n_u_m_1, enter
  584.                           the maximum logical record size in 8-bit bytes.
  585.                           For _n_u_m_2, enter the maximum physical block size
  586.                           in 8-bit bytes.
  587.  
  588.                    vvbb     Variable length blocked record format.  For _n_u_m_1,
  589.                           enter the maximum logical record size in 8-bit
  590.                           bytes.  For _n_u_m_2, enter the maximum physical
  591.                           block size in 8-bit bytes.
  592.  
  593.                    vvbbss    Variable length blocked, spanned record format.
  594.                           For _n_u_m_1, enter the maximum logical record size
  595.                           in 8-bit bytes.  For _n_u_m_2, enter the maximum
  596.                           physical block size in 8-bit bytes.
  597.  
  598.                    No _s_u_b_t_y_p_e is accepted for the iibbmm class record formats.
  599.                    _n_u_m_1 does not need to be smaller than _n_u_m_2.
  600.  
  601.                    You can specify the numeric parameters with this
  602.                    alternate keyword syntax:
  603.  
  604.                    iibbmm[[.._t_y_p_e]][[..rreeccssiizzee==_n_u_m_1]][[..mmbbss==_n_u_m_2]]
  605.  
  606.      mmrr or ssddss     Memory-resident and SDS-resident files.  mmrr is a
  607.                    deferred implementation on IRIX systems.  ssddss is not
  608.                    available on CRAY T3E systems or on IRIX systems.
  609.  
  610.                    The mmrr and ssddss layers let you declare a byte-stream
  611.                    file, but the given file should reside in the specified
  612.                    medium as much as possible; this can improve
  613.                    performance.
  614.  
  615.                    Enter one of the following for _t_y_p_e:
  616.  
  617.                    _t_y_p_e       LLooaadd SSppeecciiffiiccaattiioonn
  618.  
  619.                    ssaavvee       Default.  Loads the file into the specified
  620.                               medium when the file is opened and writes the
  621.                               data back out when closed.
  622.  
  623.                    ssccrr        Scratch file.  Does not attempt to load at
  624.                               open and discards data on close.
  625.  
  626.                    Enter one of the following for _s_u_b_t_y_p_e:
  627.  
  628.                    _s_u_b_t_y_p_e    OOvveerrffllooww SSppeecciiffiiccaattiioonn
  629.  
  630.                    oovvffll       Default.  Writes excess data that does not
  631.                               fit in the specified medium to the next lower
  632.                               layer.
  633.  
  634.                    nnoovvffll      If data does not fit in the specified medium,
  635.                               subsequent wwrriittee(1) operations fail.
  636.  
  637.                    The mmrr and ssddss layers accept numeric fields.  Generally,
  638.                    the numeric field specification represents best-efforts
  639.                    values.  They are used for tuning purposes and usually
  640.                    do not cause errors if they are not satisfied precisely
  641.                    as specified.  The fields are as follows:
  642.  
  643.                    FFiieelldd    VVaalluuee
  644.  
  645.                    _n_u_m_1     Initial size of the memory or SDS allocation.
  646.                             Specified in 4096-byte blocks.  Default is 0.
  647.  
  648.                    _n_u_m_2     Maximum size of the memory or SDS allocation.
  649.                             Specified in 4096-byte blocks.  Default is
  650.                              46
  651.                             s  -1.
  652.  
  653.                    _n_u_m_3     Increment size of the memory or SDS allocation.
  654.                             Specified in 4096-byte blocks.  This value is
  655.                             used when allocating additional memory or SDS
  656.                             space.  The default is 256 for SDS files and 32
  657.                             for memory resident files.
  658.  
  659.                    For example, if the SDS limit for a process is 1000
  660.                    blocks, and ssddss..ssccrr::11550000 is specified, an initial SDS
  661.                    allocation of 1000 blocks is used.
  662.  
  663.                    Similarly, if ssddss::550000::1100000000::11000000 was specified, the
  664.                    first request for SDS space would result in the
  665.                    allocation of 500 blocks.  If possible, this is
  666.                    allocated contiguously, but it is not guaranteed.  If a
  667.                    file size exceeds 500 blocks, an attempt is made to
  668.                    increase the file by an increment of 1000 blocks.  If
  669.                    this attempt fails, whatever can be allocated is given
  670.                    to the file.  Assuming no other SDS use, this is 500
  671.                    blocks.  At this point, the file assumes an overflow
  672.                    status.
  673.  
  674.                    When using memory-resident files, you must ensure that
  675.                    not too much data is written to the file without
  676.                    limiting its size.  Unrestrained and unmanaged growth of
  677.                    such a file can cause heap fragmentation and program
  678.                    abort.  If this growth has used all available memory,
  679.                    the error message processor may be unable to issue a
  680.                    message.  Therefore, such an abort may be difficult to
  681.                    diagnose and correct.  It is recommended that the
  682.                    maximum memory size field be specified in all cases.
  683.                    (For example, mmrr..ssccrr::::1100000000 would limit such a file to
  684.                    approximately 5 Mwords of main memory.)
  685.  
  686.                    You can specify the numeric parameters with this
  687.                    alternate keyword syntax:
  688.  
  689.                    mmrr[[.._t_y_p_e[[.._s_u_b_t_y_p_e]]]][[..ssttaarrtt__ssiizzee==_n_u_m_1]] [[..mmaaxx__ssiizzee==_n_u_m_2]]
  690.                    [[..iinncc__ssiizzee==_n_u_m_3]]
  691.  
  692.                    ssddss[[.._t_y_p_e[[.._s_u_b_t_y_p_e]]]][[..ssttaarrtt__ssiizzee==_n_u_m_1]] [[..mmaaxx__ssiizzee==_n_u_m_2]]
  693.                    [[..iinncc__ssiizzee==_n_u_m_3]]
  694.  
  695.      nnuullll          Syntactic no-op.
  696.  
  697.                    Available on IRIX systems.
  698.  
  699.                    No optional fields are accepted.  nnuullll may be specified
  700.                    where syntax demands a value, but no function is
  701.                    desired.  This does not perform the same function as
  702.                    //ddeevv//nnuullll.
  703.  
  704.      nnoossvvee         CDC NOS/VE record formats.
  705.  
  706.                    Not available on IRIX systems.
  707.  
  708.                    The following values are allowed for the _t_y_p_e and _n_u_m
  709.                    fields:
  710.  
  711.                    _t_y_p_e    VVaalluuee
  712.  
  713.                    dd       ANSI D format (variable-length) records.  For
  714.                            _n_u_m_1, enter the maximum logical record size in
  715.                            8-bit bytes.  For _n_u_m_2, enter the maximum
  716.                            physical block size in 8-bit bytes.
  717.  
  718.                    ff       ANSI F fixed-length records.  For _n_u_m_1, enter
  719.                            the logical record size in 8-bit bytes.  For
  720.                            _n_u_m_2, enter the maximum physical block size in
  721.                            8-bit bytes; _n_u_m_2 must be an exact multiple of
  722.                            _n_u_m_1.
  723.  
  724.                    ss       ANSI S format (segmented) records.  For _n_u_m_1,
  725.                            enter the maximum logical record size.  For
  726.                            _n_u_m_2, enter the maximum physical block size used
  727.                            in the lower-level layers.
  728.  
  729.                    uu       Undefined records.  For _n_u_m_1, enter the maximum
  730.                            logical record size, in 8-bit bytes.  For _n_u_m_2,
  731.                            enter the maximum physical block size in 8-bit
  732.                            bytes.
  733.  
  734.                    vv       NOS/VE V format records.  The _n_u_m_1 field is not
  735.                            permitted.  For _n_u_m_2, specify the size of the
  736.                            working buffer used in record blocking; if any
  737.                            logical records that are written exceed this
  738.                            size, a major performance penalty can result.
  739.  
  740.                    You can specify the numeric parameters with this
  741.                    alternate keyword syntax (as noted previously, ..rreeccssiizzee
  742.                    may not be permitted for some _t_y_p_e_s):
  743.  
  744.                    nnoossvvee[[.._t_y_p_e]][[..rreeccssiizzee==_n_u_m_1]][[..mmbbss==_n_u_m_2]]
  745.  
  746.      ssiittee          Site layer.  This option lets a site add custom I/O
  747.                    handlers for specific needs at load time.  See the
  748.                    _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O _G_u_i_d_e, for details.
  749.  
  750.                    Available on IRIX systems.
  751.  
  752.      ssttddiinn, ssttddoouutt, or ssttddeerrrr
  753.                    Connects to specific file descriptors 0, 1, and 2,
  754.                    respectively.  (See the ffdd class.)
  755.  
  756.      ssyysstteemm        Generic system I/O layer.  Selects bbmmxx, eerr9900, or ssyyssccaallll
  757.                    as appropriate.
  758.  
  759.                    Available on IRIX systems.
  760.  
  761.      ssyyssccaallll       System I/O call.  Each I/O operation results in a
  762.                    corresponding system call.
  763.  
  764.                    Available on IRIX systems.
  765.  
  766.                    This layer does not accept any options on UNICOS or
  767.                    UNICOS/mk systems.  On IRIX systems, it has one optional
  768.                    parameter as follows:
  769.  
  770.                    ssyyssccaallll[[._c_b_o_p_t_i_o_n]]
  771.  
  772.                    The _c_b_p_t_i_o_n can be one of the following values:
  773.  
  774.                    aaiiooccbb     The ssyyssccaallll layer is notified, via a signal,
  775.                              when the asynchronous I/O completes.
  776.  
  777.                    nnooaaiiooccbb   The ssyyssccaallll layer polls the completion status
  778.                              word to determine asynchronous I/O completion.
  779.                              This is the default value.
  780.  
  781.      ttaappee          Tape I/O.  Each logical record requested is a physical
  782.                    tape block.  This is the same as bbmmxx.
  783.  
  784.                    Deferred implementation on IRIX systems.  For
  785.                    information about the ttmmff layer on IRIX systems, see the
  786.                    _I_R_I_X _T_M_F _U_s_e_r'_s _G_u_i_d_e, 007-3969-001.
  787.  
  788.                    The _n_u_m_1 field represents the size of each buffer, in
  789.                    4096-byte blocks. The _n_u_m_2 field represents the number
  790.                    of buffers.
  791.  
  792.                    You can specify the numeric parameters with this
  793.                    alternate keyword syntax:
  794.  
  795.                    ttaappee[[..bbuuffssiizzee==_n_u_m_1]][[..nnuumm__bbuuffffeerrss==_n_u_m_2]]
  796.  
  797.      tteexxtt          Special character terminated records.
  798.  
  799.                    Available on IRIX systems.
  800.  
  801.                    Enter one of the following for _t_y_p_e:
  802.  
  803.                    _t_y_p_e    FFoorrmmaatt
  804.  
  805.                    nnll      Newline-separated records
  806.  
  807.                    eeooff     Newline-separated records and the special
  808.                            character sequence ~~ee on a line by itself
  809.                            delimiting EOF
  810.  
  811.                    220055     CYBER 205-style text file
  812.  
  813.                    ccttssss    CTSS-style text format
  814.  
  815.                    This class accepts _n_u_m specifications.  If specified,
  816.                    _n_u_m_1 represents the decimal value of the ASCII character
  817.                    to use to delimit records; the default varies depending
  818.                    on the _t_y_p_e.  For _n_u_m_2, enter the requested working
  819.                    buffer size in bytes.
  820.  
  821.                    You can specify the numeric parameters with this
  822.                    alternate keyword syntax:
  823.  
  824.                    tteexxtt[[.._t_y_p_e]][[..nneewwlliinnee==_n_u_m_1]][[..bbuuffssiizzee==_n_u_m_2]]
  825.  
  826.      uusseerr          User layer.  This option allows a user to add custom I/O
  827.                    handlers for specific needs at load time.  See the
  828.                    _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O _G_u_i_d_e, for details.
  829.  
  830.                    Available on IRIX systems.
  831.  
  832.      vvmmss           Provides record blocking for common record types on
  833.                    VMS/MS operating systems.
  834.  
  835.                    For _t_y_p_e, enter one of the following record formats:
  836.  
  837.                    _t_y_p_e    FFoorrmmaatt
  838.  
  839.                    ff       Fixed-length records
  840.  
  841.                    vv       Variable length records
  842.  
  843.                    ss       Segmented variable records
  844.  
  845.                    Each _t_y_p_e accepts the following _s_u_b_t_y_p_es to specify the
  846.                    blocking format within the record type:
  847.  
  848.                    _s_u_b_t_y_p_e FFoorrmmaatt
  849.  
  850.                    ttaappee    ANSI standard record format.  This _s_u_b_t_y_p_e
  851.                            should be used with labeled VAX/VMS tapes.
  852.  
  853.                    bbbb      Binary blocked format.  This _s_u_b_t_y_p_e should be
  854.                            used with files that are to be fetched or
  855.                            disposed with a BBBB or TTBB format, or with
  856.                            unlabeled magnetic tapes.  This _s_u_b_t_y_p_e requires
  857.                            an enclosing blocking; for example, vvmmss..ss..bbbb,,bbmmxx
  858.                            or vvmmss..ss..bbbb,,ccooss.
  859.  
  860.                    ttrr      Transparent format.  This _s_u_b_t_y_p_e should be used
  861.                            with files that are transferred between the
  862.                            VAX/VMS system by using ffeettcchh or ddiissppoossee
  863.                            (UNICOS/UNICOS/mk commands) and the TTRR format.
  864.                            Any other method that precisely transfers the
  865.                            disk image, including all VMS control words,
  866.                            will also work.  Note that ffttpp does not
  867.                            correctly transfer nontext, variable-length
  868.                            record files.
  869.  
  870.                   This class accepts _n_u_m_1 and _n_u_m_2 fields; they have a
  871.                   similar meaning to iibbmm class.  For _t_y_p_e ss, _n_u_m_1 is
  872.                   ignored.  For _t_y_p_e ff, _n_u_m_2 need not be a multiple of
  873.                   _n_u_m_1.
  874.  
  875.                   You can specify the numeric parameters with this
  876.                   alternate keyword syntax:
  877.  
  878.                   vvmmss[[.._t_y_p_e]][[.._s_u_b_t_y_p_e]][[..rreeccssiizzee==_n_u_m_1]][[..mmbbss==_n_u_m_2]]
  879.  
  880. EEXXAAMMPPLLEESS
  881.      The following are example FFIO specifications.
  882.  
  883.      Example 1:  The following example specifies FORTRAN 77/UNICOS Fortran
  884.      blocking with a working buffer of 128,000 bytes to allow efficient
  885.      creation of logical records up to 127,992 bytes:
  886.  
  887.           f77::128000
  888.  
  889.  
  890.  
  891.      Example 2:  The following example specifies IBM VBS records with a
  892.      block size of 16,384 bytes:
  893.  
  894.           ibm.vbs::16384
  895.  
  896.      Example 3:  The following example specifies a memory-resident layer
  897.      with an initial memory size of 100 4096-byte blocks:
  898.  
  899.           mr:100
  900.  
  901.      Example 4:  The following example specifies VMS V records with a
  902.      maximum record size of 1000 bytes:
  903.  
  904.           vms.v.tr:1000
  905.  
  906.      Example 5:  The following example specifies the SS-resident layer that
  907.      loads from disk on open and saves to disk on close, does not allow
  908.      overflow, has an initial size of 10 4096-byte blocks in SDS, grows to
  909.      a maximum size of 559 blocks in minimum increments of 37 blocks:
  910.  
  911.           sds.save.novfl:10:559:37
  912.  
  913.      See the _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O _G_u_i_d_e, for more detailed
  914.      information about FFIO specifications.
  915.  
  916. NNOOTTEESS
  917.      Some FFIO specification requirements are not obvious.  For example,
  918.      CYBER 205 R-type records must be requested with bbllxx..ccttssss,,tteexxtt..220055.
  919.  
  920.      The Fortran I/O library checks for conflicting attributes when file
  921.      name and unit attributes are both present during OOPPEENN processing for a
  922.      Fortran unit.  The existence of an assign attribute for both the file
  923.      and the unit results in an error condition.
  924.  
  925. SSEEEE AALLSSOO
  926.      _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O _G_u_i_d_e
  927.  
  928.      aaccppttbbaadd(3F), aassssiiggnn(3F), ffffooppeenn(3C), ooppeennmmss(3F), ooppeennddrr (see
  929.      ooppeennmmss(3F)), sskkiippbbaadd(3F)
  930.  
  931.      ddff(1), llnn(1), sseettff(1), ttppmmnntt(1), wwrriittee(1)
  932.  
  933.      aassggccmmdd(1), aassssiiggnn(1)
  934.  
  935.      iiaalllloocc(2), ooppeenn(2)
  936.  
  937.      SSDDSSAALLLLOOCC(3F)
  938.  
  939.      _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _L_i_b_r_a_r_y _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l for the printed
  940.      version of this man page.
  941.