Может ли 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 или любой другой тип.

Другие вопросы по тегам