mmap(2), msync(2)
mmapは「ファイルやデバイスをメモリにマップ」するシステムコール。 msyncは「ファイルをマップしたメモリと同期させる」システムコール。
#include <stdlib.h> #include <fcntl.h> #include <stdio.h> #include <sys/mman.h> int main(int argc, char* argv[]) { int fd; char *cp; fd = open("/tmp/mmap", O_RDWR); cp = mmap(NULL, sizeof(char), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); printf("%c\n", *cp); *cp = *cp + 1; msync(cp, sizeof(char), 0); return 0; }
とすると
$ echo a > /tmp/mmap $ gcc mmap.c $ ./a.out a $ ./a.out b $ ./a.out c
とインクリメントされ、ファイルに同期されてることがわかる。 OSの振る舞いがわかって面白い。