C linux中MMAP值的生存期

C linux中MMAP值的生存期,c,linux,mmap,beagleboneblack,C,Linux,Mmap,Beagleboneblack,嗨,我在debian上运行beaglebone black,我在/dev/mem文件上使用mmap访问GPIO寄存器。 我有一个.c文件,其中包含映射函数: //sample code unsigned int *gpio_get_map(int gpio) { unsigned int *gpio_addr = NULL; int fd = open("/dev/mem", O_RDWR); gpio_addr = mmap(0, GPIO_SIZE,

嗨,我在debian上运行beaglebone black,我在/dev/mem文件上使用
mmap
访问GPIO寄存器。 我有一个.c文件,其中包含映射函数:

//sample code

unsigned int *gpio_get_map(int gpio)

{

    unsigned int *gpio_addr = NULL;

    int fd = open("/dev/mem", O_RDWR);
        gpio_addr = mmap(0, GPIO_SIZE, PROT_READ | PROT_WRITE,MAP_SHARED,fd, gpio_get_number(gpio));
        if(gpio_addr == MAP_FAILED)
        {
            printf("Unable to map GPIO : %s\n",strerror(errno));
            close(fd);
            return NULL;
        }
        close(fd);
        return gpio_addr;
}
然后我在另一个.c文件中调用此函数,以获取
gpio\u addr
的值,并使用它来操作gpio,它工作正常,但我不确定
gpio\u addr
的有效期有多长。
gpio\u addr
提供的地址是否始终有效?或者我应该在一段时间后调用另一个
mmap
?谢谢。

您不需要更新映射。它将在调用进程中保持有效,直到您显式取消映射(或进程结束)。

您无需续订映射。它将在调用进程中保持有效,直到您显式取消映射(或进程结束)。

您无需续订映射。它将在调用进程中保持有效,直到您显式取消映射(或进程结束)。

您无需续订映射。它将在调用进程中保持有效,直到您显式取消映射它(或进程结束)。

注意:
return-1
在一个声明返回指向unsigned-int的指针的函数中是错误的。为什么不在失败时返回NULL呢?是的,感谢提醒meNote:
返回-1
在一个声明返回指向unsigned-int的指针的函数中是错误的。为什么不在失败时返回NULL呢?是的,感谢提醒meNote:
返回-1
在一个声明返回指向unsigned-int的指针的函数中是错误的。为什么不在失败时返回NULL呢?是的,感谢提醒meNote:
返回-1
在一个声明返回指向unsigned-int的指针的函数中是错误的。为什么不在失败时返回NULL呢?是的,谢谢你提醒我,这意味着即使我使用这个.c作为python扩展,只要进程没有结束或取消映射,它在python代码中仍然有效?这是否意味着即使我使用这个.c作为python扩展扩展只要进程没有结束或我取消映射它,它在python代码中仍然有效?这是否意味着即使我使用这个.c作为python扩展,只要进程没有结束或我取消映射它,它在python代码中仍然有效?这是否意味着即使我使用这个.c作为python扩展,它在python代码中仍然有效python代码,只要进程没有结束或我取消映射它?