Read blocks of data from a file
#include <unistd.h> int readblock( int fd, size_t blksize, unsigned block, int numblks, void *buff );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The readblock() function reads numblks blocks of data from the file associated with the open file descriptor fd, into the buffer pointed to by buff, starting at block number block (blocks are numbered starting at 0). The blksize argument specifies the size of a block, in bytes.
This function is useful for direct access to raw blocks on a block special device (for example, raw disk blocks) but may also be used for high-speed access to database files, for example. (The speed gain is through the combined seek/read implicit in this call, and the ability to transfer more than the read() function's limit of INT_MAX bytes at a time.)
If numblks is zero, readblock() returns zero and has no other results.
On successful completion, readblock() returns the number of blocks actually read and placed in the buffer. This number is never greater than numblks. The value returned may be less than numblks if one of the following occurs:
If a read error occurs on the first block, readblock() returns -1 and sets errno to EIO.
The number of blocks actually read. If an error occurs, it returns -1, sets errno to indicate the error, and the contents of the buffer pointer to by buff are left unchanged.
Safety: | |
---|---|
Cancellation point | Yes |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |