首页 > 解决方案 > 是否可以读取文件并将缓冲区直接存储到共享内存中?

问题描述

实际上,我在 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延迟吗?

标签: linuxmemory-managementsystem-calls

解决方案


推荐阅读