2
私は物理アドレス、具体的には0x000000368d76c0
が与えられました。私はmmap
私のプログラムにそれをしようとしている。私が使用しているコードはmmapが失敗するのはなぜですか?
void *mmap64;
off_t offset = 0x000000368d76c0;
int memFd = open("/dev/mem", O_RDWR);
if (-1 == memFd)
perror("Error ");
mmap64 = mmap(0, sizeof(uint64_t), PROT_WRITE | PROT_READ, MAP_SHARED, memFd, offset);
if (MAP_FAILED == mmap64) {
perror("Error ");
return -1;
}
私はmmap
上の失敗を取得し、このコードを実行するいくつかの理由です。特にそれはError Invalid argument
と言います。私はそれがoffset
の値のためにあると確信していますが、何が間違っているのか分かりません。
私はそれに助けていただきありがとうございます。
'mmap()'の引数に 'adddress'によって' address'を意味しますか? – MikeCAT
@MikeCAT私は 'offset'引数を意味します。 – flashburn
[mmap(2) - Linuxのマニュアルページ](http://man7.org/linux/man-pages/man2/mmap.2.html)は、 "offset"は、返されたページサイズの倍数でなければならない'sysconf(_SC_PAGE_SIZE)' "あなたのシステムの価値は何ですか?リファレンス:[sysconf(3) - Linuxのマニュアルページ](http://man7.org/linux/man-pages/man3/sysconf.3.html) – MikeCAT