Query: rfio_preseek
OS: debian
Section: 3
Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar
RFIO_PRESEEK(3) Rfio Library Functions RFIO_PRESEEK(3)NAMErfio_preseek - prefetch chunks of data from a fileSYNOPSIS#include <sys/types.h> #include "rfio_api.h" int rfio_preseek (int s, const struct iovec *iov, int iovnb); Under Linux, for large files: #define _LARGEFILE64_SOURCE #include <sys/types.h> #include "rfio_api.h" int rfio_preseek64 (int s, const struct iovec64 *iov, int iovnb); For large files, under other systems: #include <sys/types.h> #include "rfio_api.h" int rfio_preseek64 (int s, const struct iovec64 *iov, int iovnb);DESCRIPTIONrfio_preseek prefetches chunks of data at given offsets into an internal buffer (on the client side), using the descriptor s generated by a previous rfio_open. The actual offset values and the lengths are given in the array of structures iov. The number of chunks is specified by iovnb. rfio_preseek64 does the prefetch for large files, using an array of structures of type iovec64 rather than an array of iovec. RFIO_READOPT must be set to RFIO_READBUF, which is the default. The default internal buffer size is 128 kB, but the buffer size can be set with an entry RFIO IOBUFSIZE in shift.conf. Then rfio_read gets the data from that buffer.EXAMPLES/* tpreseek - write NBRECORDS_TOWRITE records and read back NBRECORDS_TOREAD using the rfio_preseek function */ #include <fcntl.h> #include <stdio.h> #if defined(_WIN32) #include <winsock2.h> #endif #include "rfio_api.h" #define NBRECORDS_TOREAD 5 #define NBRECORDS_TOWRITE 10 main(argc, argv) int argc; char **argv; { char buf[65536]; int errflg = 0; int fd; int i; struct iovec iov[NBRECORDS_TOREAD]; int iovnb = NBRECORDS_TOREAD; int j; static int lengths[NBRECORDS_TOWRITE] = {4096, 32768, 16384, 8192, 65536, 32768, 16384, 4096, 65536, 8192}; static int records_toread[NBRECORDS_TOREAD] = {2, 4, 5, 8, 9}; #if defined(_WIN32) WSADATA wsadata; #endif if (argc != 2) { fprintf (stderr, "usage: tpreseek pathname "); exit (1); } #if defined(_WIN32) if (WSAStartup (MAKEWORD (2, 0), &wsadata)) { fprintf (stderr, "WSAStartup unsuccessful "); exit (2); } #endif while (! errflg) { /* Write variable length records. * Each record is filled with the record index */ if ((fd = rfio_open (argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0644)) < 0) { rfio_perror ("rfio_open"); errflg++; break; } for (j = 0; j < NBRECORDS_TOWRITE; j++) { for (i = 0; i < lengths[j]; i++) buf[i] = j; if (rfio_write (fd, buf, lengths[j]) < 0) { rfio_perror ("rfio_write"); errflg++; break; } } (void)rfio_close (fd); if (errflg) break; /* Prefetch a few records: the actual offsets and lengths * of the records is set in the array of iov structures */ if ((fd = rfio_open (argv[1], O_RDONLY)) < 0) { rfio_perror ("rfio_open"); errflg++; break; } for (j = 0; j < NBRECORDS_TOREAD; j++) { /* compute record offset */ iov[j].iov_base = 0; for (i = 0; i < records_toread[j]; i++) iov[j].iov_base = (char *) iov[j].iov_base + lengths[i]; /* set length */ iov[j].iov_len = lengths[records_toread[j]]; } if (rfio_preseek (fd, iov, iovnb) < 0) { rfio_perror ("rfio_preseek"); errflg++; break; } /* Read back the records and check their cpntents */ for (j = 0; j < NBRECORDS_TOREAD; j++) { if (rfio_lseek (fd, (off_t) iov[j].iov_base, SEEK_SET) < 0) { rfio_perror ("rfio_lseek"); errflg++; break; } if (rfio_read (fd, buf, iov[j].iov_len) < 0) { rfio_perror ("rfio_read"); errflg++; break; } for (i = 0; i < iov[j].iov_len; i++) { if (buf[i] != records_toread[j]) { fprintf (stderr, "incorrect data read, record %d ", records_toread[j]); errflg++; break; } } if (errflg) break; } (void) rfio_close (fd); break; } if (rfio_unlink (argv[1]) < 0) { rfio_perror ("rfio_unlink"); errflg++; } #if defined(_WIN32) WSACleanup(); #endif exit (errflg ? 1 : 0); }RETURN VALUEThis routine returns 0 if the operation was successful or -1 if the operation failed. In the latter case, serrno is set appropriately.ERRORSEBADF s is not a valid descriptor. EINVAL RFIO_READOPT is not set to RFIO_READBUF. SENOSHOST Host unknown. SENOSSERV Service unknown. SETIMEDOUT Timed out. SEBADVERSION Version ID mismatch. SECONNDROP Connection closed by remote end. SECOMERR Communication error. SENORCODE Host did not return error number.SEE ALSOrfio_lseek(3), rfio_open(3), rfio_read(3)AUTHORLCG Grid Deployment TeamLCG$Date: 2005/03/31 13:13:03 $ RFIO_PRESEEK(3)
Related Man Pages |
---|
readv(2) - linux |
rfio_open64(3) - debian |
rfio_open(3) - debian |
rfio_preseek64(3) - debian |
readv(3posix) - linux |
Similar Topics in the Unix Linux Community |
---|
How to calculate a sum of certain records? |