mmap() HOWTO

デバイスドライバ書いてると、mmap() が使えるようにしたいなー、とか思うわけで。

みたいな記事を読んで、理解できた気がするね。「Linux デバイスドライバ」という本がすごいわけですが、あれだけだとちょっと不十分な感じだったのだ。

そういえば普通にファイルを mmap() して読み書き、というのもやったことないや、と思ったので、ちょっと書いてみた。

#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
int main(){
int fd;
char* p;
int i;
fd = open("textfile", O_RDWR);
if(fd<0) printf("can't open!\n");
printf("fd=%d\n", fd);
p= (char*)mmap(NULL, 100, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0);
printf("p=%lx\n", (long unsigned int)p);
if(p==MAP_FAILED) printf("can't mmap!\n");
for(i=0; i<100; i++)
putchar(p[i]);
for(i=0; i<10; i++)
p[i]=0x30+i;
close(fd);
return 0;
}

これで、配列の値を変更した通りにちゃんとファイルが書き換わる。Unix はかっこいい仕掛けがいっぱいあるなー。

コメントを残す