提供一份测试demo:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <fcntl.h> #include <sys/file.h> #include <sys/mman.h> #include <sys/stat.h> int open_file(char *path) { int fd; fd = open(path,O_RDONLY); if (-1 == fd){ printf("error open\n"); return -1; } return fd; } int get_file_size(int fd) { struct stat st; int ret; ret = fstat(fd,&st); if (-1 == ret){ printf("fstat failed\n"); return -1; } return st.st_size; } typedef struct gpios{ char value; }GPIOS; int get_value_mmap_files(int fd, int len, char *value) { GPIOS *gpio; gpio = mmap(NULL,len,PROT_READ,MAP_SHARED,fd,0); if (NULL == gpio || gpio == (void*) - 1){ printf("error mmap\n"); return -1; } *value = gpio->value; munmap(gpio,len); close(fd); return 0; } int main(int argc, char **argv) { //open file //get size of file //use mmap //close char path[32] = "/tmp/wat"; int fd; int len; int ret; char value; fd = open_file(path); if(-1 == fd) return -1; len = get_file_size(fd); if (-1 == len) return -1; ret = get_value_mmap_files(fd,len,&value); if (-1 == ret) return -1; printf("The gpio level is %c\n",value); return 0; }
其实就利用mmap代替read/fread读取文件内容,可以参考,了解应用。
mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作
Life is mess, don't let mess mess us.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了