次のコードが正しく機能するのはなぜですか?
void continuous_mmap (void)
{
struct stat buf;
int fd = open("file_one", O_RDONLY), i;
char *contents;
fstat(fd, &buf);
contents = mmap(NULL, buf.st_size, PROT_WRITE, MAP_PRIVATE, fd, 0);
close (fd);
mprotect(contents, buf.st_size, PROT_READ);
for (i = 0; i < 15; i++) {
printf ("%s\n", contents);
sleep (1);
}
munmap(contents, buf.st_size);
}
まず、追加された場合でも、ファイルは同期されたままになります (ファイルを外部で編集および保存すると、更新されたコンテンツが自動的に印刷されます)。マッピングしたバイト数 (初期ファイル サイズ) を超えてコードがセグメンテーション違反なしでアクセスできるようにするにはどうすればよいですか? mmap
常に長さをシステムページサイズに切り上げているためですか? もしそうなら、この動作は一般的なシステムに依存している可能性があります ( man ページPOSIX
でそのような要件を見つけることができませんでした)。mmap
第二に、どのようにしてテキストに ? が自動的に追加され'0'
ますか? マップされていないバイトが自動的にゼロになるためですか? この動作は依存できますか?