mmap.c
application/octet-stream
Filename: mmap.c
Type: application/octet-stream
Part: 0
/* mmap() test program */
#include <stdio.h>
#include <fcntl.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/mman.h>
#define MMAP_SIZE 8192
int main(int argc, char *argv[])
{
int i, j, fd, spaces = 0;
int off;
char *addr;
int msize = MMAP_SIZE;
#ifdef READ
int br;
addr = (char *) malloc(MMAP_SIZE);
printf("Testing reads\n");
#else
printf("Testing mmaps\n");
#endif
fd = open("./test", O_RDONLY, 0);
assert(fd != 0);
printf("mmap_size: %i\n",msize);
for (off = 0; off< 111329280; off += MMAP_SIZE)
{
printf("offset: %li\r", off);
#ifdef READ
br = read(fd, addr, MMAP_SIZE);
#else
addr = (char *) mmap(0, MMAP_SIZE, PROT_READ, MAP_SHARED, fd, off);
if(addr == MAP_FAILED) {
perror("Mmap error");
break;
}
assert(addr != NULL);
#endif
for (j = 0; j < MMAP_SIZE; j+=256)
if (addr[j] == ' ')
spaces++;
#ifdef READ
if (br < MMAP_SIZE) {
break;
}
#else
munmap(addr,MMAP_SIZE);
#endif
}
printf("%d\n",spaces);
free(addr);
return 0;
}