バイトファイルを変更する単純なmmapプログラムを作成しました。シンプル/小さなファイルにrootとして ランは、コードがmmapを使用してファイルを変更するときの許可エラー
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
int main(int argc, char *argv[]) {
int fd = open(argv[1], O_WRONLY);
printf("fd=%d\n", fd);
char *p = mmap(0, 0x1000, PROT_WRITE, MAP_SHARED, fd, 0);
if (p == MAP_FAILED) {
perror ("mmap");
return 1;
}
p[0] = 0xde;
close(fd);
return 0;
}
スニペットエラー
# ./a.out tmp.txt 92
fd=3
mmap: Permission denied
を得た間違っていたのだろうか。ありがとう。
UPDATE1 は、コードスニペットのタイプミスを修正、私はそこPROT_WRITE
を使用することを意味しました。 MMAPのmanページから
「PROT_WRITE」を使用してコードスニペットを修正しましたが、同じ話がありました。 – packetie
ファイルのサイズは本当に '0x1000'バイトですか?これは4096バイトです。 – mch
サイズは実際には92バイトで、私のLinux上ではページサイズなので '0x1000'です – packetie