存储临时数据的位置(嵌入式C)

时间:2016-10-31 20:52:07

标签: c linux file-io

我有一个非常强大的嵌入式linux设备,用于从各种套接字/ fd:s使用C收集数据。这些数据将被解析,缓冲并传递到TCP / IP或UDP套接字到被转移到其他地方进行长期储存。最后一步发生在获取足够数量的数据时,或者当其他事件触发时。

我的问题是:有没有理由不缓冲堆上的所有内容(而不是写入/读取某些linux文件描述符),因为

  • 我的设备的唯一目的是此类数据采集
  • 该设备从不用于长期存储

仅使用堆声音反直觉,但我真的不明白为什么我们不应该尽可能多地存储在堆中,至少在RAM变得稀缺之前。

2 个答案:

答案 0 :(得分:0)

存储在主存储器中的数据通常不会在断电时保留。如果收集的数据必须在断电后继续存在,则必须将其存储在非易失性存储器中。

不幸的是,只是将数据写入文件并不能保证可靠的存储空间,因此大多数Linux文件系统都会因断电而遭受数据丢失的风险。

第二种情况,即文件中的存储可能有用,即文件中收集的数据可以在应用程序崩溃后继续存在。我们都尽力不让我们的应用程序崩溃,但尽管付出了很多努力,但它仍然经常发生。 : - (

答案 1 :(得分:0)

我不明白为什么你说“使用堆是反直觉的” - 数以百万计的嵌入式路由器和交换机将堆用于存储转发队列(我知道你做的是类似的)。

这在很大程度上取决于您获得的数据。在发生电源故障或设备的其他重置事件时可以重新获取的任何内容都不需要进入永久存储。

难以或无法重新获取的数据以及这些有价值的数据(例如传感器数据),您可能希望将其推入安全的地方,以防止重置和断电。

另一方面,如果您的数据不是分段的,而是面向流的,那么将它存储到文件可能会容易得多 - 还要注意内存不足的情况和堆内存泄漏可能会对实际造成麻烦。在嵌入式系统中进行调试。