使用vector <char>实现串行缓冲区的最佳方法是什么?

时间:2015-08-13 19:02:19

标签: c++ vector

我需要从串行设备读取数据并将其放入缓冲区以供另一个线程使用。基本上,我想实现这个目标:

while(!exit){
    // read from fd and push into the vector<char> buffer
}

在C ++中以正确的方式做到这一点。我知道如何在C中完成这项工作,如果有人能指出我正确的方向,我真的很感激。

据我所知,到目前为止,人们一直在暗示:

read(fd, &vector[0], vector.size());

但是,我不相信。特别是因为直接修改&vector[0]不会更新size()(或者是吗?)并且看起来像是修改底层数组的间接方式。如果我能提供帮助,我也希望避免使用open()read(),因为它们不是真正的C ++。某种形式的istream在这里会很棒!

另外,我找不到任何关于如何整洁地弹出&#34;的例子。当需要从另一个线程消耗数据时,来自此向量的数据。我相信,我当然不是100%肯定这一点,如果这个向量只有一个编写器线程和一个读者线程,我就不需要任何特殊的线程安全代码。如果我错了,请纠正我。

如果它很重要,矢量中的数据是二进制的。

1 个答案:

答案 0 :(得分:1)

根据我的经验,我总是使用固定大小的uint8_t数组进行串行通信。这提供了比通过vector更快的访问;并且大多数串行I / O都是时间敏感的。

固定大小意味着没有花时间调整大小。