読者です 読者をやめる 読者になる 読者になる

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の振る舞いがわかって面白い。