On Wed, 2008-09-24 at 12:17 -0400, Charles Wilt wrote:
How do you know what the record length is?

I don't know ahead of time what file I'll be opening. I suppose I
could use an API call to determine what the record length is, but is
it already there somewhere?

Perhaps in _RIOFB_T or _RFILE?

Speaking of _RIOFB_T and _RFILE. Is there anyplace in the manual that
gives more info on what is contained in these two structures? The
names of the subfields just don't seem to be enough in some cases.

<http://publib.boulder.ibm.com/infocenter/systems/topic/books/sc415607.pdf>, iSeries ILE C/C++ Run-Time Library Functions Version 5, SC41-5607-02, pages numbered 9 through 11 (pages 21 through 23 within the .pdf).



On Wed, Sep 24, 2008 at 11:31 AM, Elvis Budimlic
<ebudimlic@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
In locate mode num_bytes will be equal to record length if read was
successful, otherwise it will not (besides the EOF check of course).
Let me know if you need more details on this.

HTH, Elvis

Celebrating 11-Years of SQL Performance Excellence on IBM i, i5/OS and

-----Original Message-----
Subject: [C400-L] Question about _Rreadn C function


I'm calling the _Rread() C function from RPG (thus the cross-posting).

_RIOFB_T *_Rreadn (_RFILE *fp, void *buf, size_t size, int opts)

I'm trying to use the "locate mode" of the function by not passing the
void *buf parameter as I want to move the buffer myself ( via
fp->in_buf) in a later procedure.

However, my question: how can I determine if an error occurred?
According to the manual:

"If attempts are made to read beyond the last record in the file, the
num_bytes field is set to EOF. If it is unsuccessful, the num_bytes
field is set to a value less than size, and errno is changed. If you
are using device files and specify zero as the size, check errno to
determine if the function was successful."

But when in "locate mode" the manual says:
"size Specifies the number of bytes that are to be read and stored in
buf. If locate mode is used, this parameter is ignored."

So I can still detect EOF, but what about other errors?

Charles Wilt

This is the C programming iSeries / AS400 (C400-L) mailing list
To post a message email: C400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/c400-l.

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2021 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.