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; }