mmap 可以通过函数传递地址吗?

Can mmap pass the address though a function?

我正在尝试使用 mmap 读取 beaglebone black 上的物理内存。这通常有效,但我想创建一个函数,因为此代码经常重复。在这个例子中,我调用函数 memory。我只是想知道函数内存是否会 return 地址,并且在传递回 main 后仍然可以访问。

#include<fcntl.h>
#include<sys/mman.h>

int main(void)
{
    int fd;
    int read32bytes;
    volatile void *data;
    fd=open("/dev/mem", O_RDWR);
    *data=memory(fd, 64, 0);
    read32bytes=*data;
    munmap(data, 64);
    close(fd);
 }

volatile void *memory(int fd, int sizeInBytes, int offset)
{
    volatile void *address;
    address=mmap(0, sizeInBytes, PROT_READ | PROT_WRITE , MAP_SHARED, fd, offset);
    return address;
}

是的。

我唯一能看出你做错的是你使用 *data= 将结果分配给 data*data = something 不是 分配变量 data,而是分配 data 指向的东西(即 *data)。由于 data 从未设置为指向任何特定内容,因此您不知道要分配给什么,这很糟糕。

要将变量 data 分配给调用函数的结果,您可以使用 data = memory(fd, 64, 0) - 就像 dataint 或任何其他类型。