linux - 是否可以读取文件并将缓冲区直接存储到共享内存中?
问题描述
实际上,我在 Linux 上编写了一个 C 应用程序,它必须从文件描述符中读取,然后将读取缓冲区存储到进程之间的共享内存中。
我试过这个:
while(1) {
if(read (chRPMSG, data_buff[data_buff_it], SIZE_MSG) < 0) exit(0);
else {
data_buff_it = (data_buff_it + 1) % NUM_ELEMENTS;
}
}
其中data_buff_it
定义为char **data_buff;
并初始化为data_buff = mmap(NULL, NUM_ELEMENTS * SIZE_MSG, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
。
这段代码非常适合我的目的。但是,它不起作用,因为出现 next error 14 EFAULT Bad address
。
我知道有很多不同的方法可以解决这个问题,但是例如,由于系统调用对于读取频率太慢(1024 Hz,每条消息 448 字节),将读取缓冲区复制strcpy
到不起作用data_buff
- 请注意,我正在使用微处理器。
有没有其他方法可以直接写入共享内存?如果没有,有什么想法可以提高strcpy
延迟吗?
解决方案
推荐阅读
- javascript - 为什么不顺风覆盖本地定义的样式?
- r - 在两个值/日期间隔之间按 id 填写最大值
- javascript - 如何禁用vtk的热键
- javascript - 如何使用节点js在mysql中对findOne方法进行分页
- unity3d - 使用 Visual Studio 2019 部署到 Hololens 2
- mysql - Mysql - 将两个选择与不同的值结合起来
- heroku - 试图在 heroku 上托管我的不和谐机器人但我无法获得工人。请告诉我如何解决这个问题以及在哪里
- python - 如何在 python 中读取大型 Json 文件以获取某些值
- ios - 需要帮助减少 RXSwift 中的部分
- javascript - nodejs(express)服务器重新启动后,Agenad 作业没有重新开始