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

What is the best way to implement a serial buffer using vector<char>?

本文关键字:是什么 方法 lt char 最佳 gt 实现 缓冲区      更新时间:2023-10-16

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

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++。某种形式的流在这里会很棒!

另外,当数据需要从另一个线程中使用时,我找不到任何例子来说明如何巧妙地从这个向量中"弹出"数据。我相信,当然我不能100%确定,如果这个向量只有一个写线程和一个读线程,我就不需要任何特殊的线程安全代码。如果我说错了,请纠正我。

如果有关系的话,vector中的数据是二进制的

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

固定大小意味着不需要花时间调整大小。