#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <fcntl.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) 
{
  int rep = atoi(argv[1]);
  int i;
  char *filename;
  int fd;
  struct stat statbuf;
  off_t filesize;
  unsigned blocksize;
  void *blockbuf;

  filename = argv[2];
  fd = open(filename, O_RDONLY);

  fstat(fd, &statbuf);
  filesize = statbuf.st_size;
  blocksize = statbuf.st_blksize;
  blockbuf = malloc(blocksize);

  srandom(getpid()^clock());

  for (i=0;i<rep;i++) {
    struct timeval timeval1,timeval2;
    off_t offset = random()%filesize / blocksize * blocksize;

    gettimeofday(&timeval1,NULL);
    lseek(fd, offset, SEEK_SET);
    read(fd, blockbuf, blocksize);
    gettimeofday(&timeval2,NULL);
    
    /*    printf("Read (%d at %ld) took %ld us\n", blocksize, offset, timeval2.tv_usec-timeval1.tv_usec + (timeval2.tv_sec-timeval1.tv_sec)*1000000);*/
    printf("%ld\n", timeval2.tv_usec-timeval1.tv_usec + (timeval2.tv_sec-timeval1.tv_sec)*1000000);
  }

  return 0;
}

    
