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