_Rreadindv() — Read from an Invited Device
Format
#include <recio.h>
_RIOFB_T *_Rreadindv(_RFILE *fp, void *buf, size_t size, int opts);
Language Level
ILE C Extension
Threadsafe
No
Description
The _Rreadindv()
function
reads data from an invited device.
The following are valid parameters for the
_Rreadindv()
function.
- buf
- Points to the buffer where the data that is read is to be stored. If locate mode is used, this parameter must be set to NULL.
- size
- Specifies the number of bytes that are to be read and stored in buf. If locate mode is used, this parameter is ignored.
- opts
- Specifies the processing options for the file. Possible values
are:
- __DFT
- If the file is opened for updating, then the record being read or positioned to is locked. Otherwise, the option is ignored.
The _Rreadindv()
function
is valid for display and ICF files.
Return Value
The _Rreadindv()
function
returns a pointer to the _RIOFB_T structure that is associated with fp.
If the _Rreadindv()
function
is successful, the num_bytes field is set to the number of bytes transferred
from the system buffer to the user's buffer (move mode) or the record
length of the file (locate mode). The sysparm and rrn (for subfiles)
fields are also updated. The num_bytes field
is set to EOF if the file is empty. If the _Rreadindv()
function
is unsuccessful, the num_bytes field is set to a value less than the
value of size and the errno will be changed.
The value of errno may be set to:
- Value
- Meaning
- ENOTREAD
- The file is not open for read operations.
- ETRUNC
- Truncation occurred on an I/O operation.
- EIOERROR
- A non-recoverable I/O error occurred.
- EIORECERR
- A recoverable I/O error occurred.
Example
#include <stdio.h>
#include <recio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char name[20];
char address[25];
} format1 ;
typedef struct {
char name[8];
char password[10];
} format2 ;
typedef union {
format1 fmt1;
format2 fmt2;
} formats ;
int main(void)
{
_RFILE *fp; /* File pointer */
_RIOFB_T *rfb; /* Pointer to the file's feedback structure */
_XXIOFB_T *iofb; /* Pointer to the file's feedback area */
formats buf, in_buf, out_buf; /* Buffers to hold data */
/* Open the device file. */
if (( fp = _Ropen ( "MYLIB/T1677RD2", "ar+" )) == NULL )
{
printf ( "Could not open file\n" );
exit ( 1 );
}
_Racquire ( fp,"DEVICE1" ); /* Acquire another device. Replace */
/* with actual device name. */
_Rformat ( fp,"FORMAT1" ); /* Set the record format for the */
/* display file. */
rfb = _Rwrite ( fp, "", 0 ); /* Set up the display. */
_Rpgmdev ( fp,"DEVICE2" ); /* Change the default program device. */
/* Replace with actual device name. */
_Rformat ( fp,"FORMAT2" ); /* Set the record format for the */
/* display file. */
rfb = _Rwrite ( fp, "", 0 ); /* Set up the display. */
rfb = _Rwriterd ( fp, &buf, sizeof(buf) );
rfb = _Rwrread ( fp, &in_buf, sizeof(in_buf), &out_buf,
sizeof(out_buf ));
_Rreadindv ( fp, &buf, sizeof(buf), __DFT );
/* Read from the first device that */
/* enters data - device becomes */
/* default program device. */
/* Determine which terminal responded first. */
iofb = _Riofbk ( fp );
if ( !strncmp ( "FORMAT1 ", iofb -> rec_format, 10 ))
{
_Rrelease ( fp, "DEVICE1" );
}
else
{
_Rrelease(fp, "DEVICE2" );
}
/* Continue processing. */
printf ( "Data displayed is %45.45s\n", &buf);
_Rclose ( fp );
}
Related Information
- _Rreadd() — Read a Record by Relative Record Number
- _Rreadf() — Read the First Record
- _Rreadk() — Read a Record by Key
- _Rreadl() — Read the Last Record
- _Rreadn() — Read the Next Record
- _Rreadnc() — Read the Next Changed Record in a Subfile
- _Rreadp() — Read the Previous Record
- _Rreads() — Read the Same Record