A simple read I/O function handler example
QNX SDP8.0Getting Started with the QNX OSDeveloperUser
To illustrate how your resource manager might return data to a client, consider a simple resource manager that always returns the constant string "Hello, world!\n". There are a number of issues involved, even in this very simple case.
- Matching of the client's data area size to the data being returned
- In our case, the resource manager is returning a fixed string of 14 bytes—there is exactly
that much data available. This is identical to a read-only file on a disk that contains
the string in question; the only real difference is that this
file
is maintained in our C program via the statement:char *data_string = "Hello, world!\n";
The client, on the other hand, can issue a read() request of any size—the client could ask for one byte, 14 bytes, or more. The impact of this on the read I/O function handler that you're going to provide is that you must be able to match the client's requested data size with what's available.
- Handling of the EOF case
- A natural fallout of the way you handle the client's data area size considerations is the corner case of dealing with the End-Of-File (EOF) on the fixed string. Once the client has read the final \n character, further attempts by the client to read more data should return EOF.
- Maintenance of context information (the lseek() index)
- Both the
Data area size considerations
and theHandling of EOF case
scenarios will require that context be maintained in the OCB passed to your read I/O function handler, specifically the offset member. - Updating of POSIX stat() information
- One final consideration: when data is read from a resource manager, the POSIX access time (atime) variable needs to be updated. This is so that a client stat() function will show that someone has indeed accessed the device.
Page updated: