mmap で読み込み、ファイル I/O で書き込み

念のためテストコードを書いて確認。ちゃんと動く。

#include <assert.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
  int fd, i;
  int *map;
  char buf[16];
  
  fd = open("/tmp/mmap_pwrite.tmp", O_RDWR | O_CREAT | O_TRUNC, 0666);
  assert(fd != -1);
  
  for (i = 0; i < 16; i++) {
    buf[i] = i;
  }
  for (i = 0; i < 64; i++) {
    write(fd, buf, 16);
  }
  
  map = mmap(NULL, 1024, PROT_READ, MAP_SHARED, fd, 0);
  assert(map != NULL);
  
  for (i = 0; i < 1024 * 1024; i++) {
    //printf("location: %d, value: %d\n", ((i * 7) % 256) * 4, i);
    pwrite(fd, &i, 4, ((i * 7) % 256) * 4);
    assert(map[(i * 7) % 256] == i);
  }
  
  return 0;
}

参考: Unified Buffer Cache - kazuhoのメモ置き場