Может ли mmap передать адрес через функцию?
Я пытаюсь использовать mmap для чтения физической памяти на биглебоне черном. Обычно это работает, но я хочу создать функцию, потому что этот код часто повторяется. В этом примере я вызываю функцию memory. Я просто хочу знать, вернет ли память функции адрес и будет ли он по-прежнему доступен после того, как он будет передан обратно на главную.
#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;
}
1 ответ
Да.
И единственное, что я вижу, что ты сделал неправильно, ты использовал *data=
присвоить результат data
, *data = something
не назначает переменную data
, а скорее назначает вещь data
указывает на (т.е. *data
). поскольку data
никогда не был установлен, чтобы указывать на что-то конкретное, вы не знаете, что вы назначаете, что плохо.
Чтобы назначить переменную data
к результату вызова функции, вы бы использовали data = memory(fd, 64, 0)
- так же, как если бы data
был int
или любой другой тип.