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)
- 就像 data
是 int
或任何其他类型。
我正在尝试使用 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)
- 就像 data
是 int
或任何其他类型。