# I/O Control List

The I/O control list specifies one or more of the following:

- The I/O unit to act upon ([UNIT=]io-unit)

  This specifier must be present; the rest are optional.

- The format (explicit or list-directed) to use for data editing; if explicit, the keyword form must appear ([FMT=]

- The namelist group name to act upon ([NML=]group)

- The number of a record to access (REC=)

- The name of a variable that contains the completion status of an I/O operation (IOSTAT=)

- The label of the statement that receives control if an error (ERR=), end-of-file (END=), or end-of-record (EOR=) condition occurs

- Whether you want to use advancing or nonadvancing I/O (ADVANCE=)

- The number of characters read from a record (SIZE=)

- Whether you want to use asynchronous or synchronous I/O (ASYNCHRONOUS=)

- The identifier for a pending data transfer operation (ID=)

- The identifier for the file position in file storage units in a stream file (POS=)

- The name of a variable that contains an error message (IOMSG=)

No control specifier can appear more than once, and the list must not contain both a format specifier and namelist group name specifier.

Control specifiers can take any of the following forms:

- Keyword form

  When the keyword form (for example, UNIT=io-unit) is used for all control-list specifiers in an I/O statement, the specifiers can appear in any order.

- Nonkeyword form

  When the nonkeyword form (for example, io-unit) is used for all control-list specifiers in an I/O statement, the io-unit specifier must be the first item in the control list. If a format specifier or namelist group name specifier is used, it must immediately follow the io-unit specifier.

- Mixed form

  When a mix of keyword and nonkeyword forms is used for control-list specifiers in an I/O statement, the nonkeyword values must appear first. Once a keyword form of a specifier is used, all specifiers to the right must also be keyword forms.

Parent topic: Components of Data Transfer Statements