C ++文件操作导致嵌入式Linux上的“崩溃”

时间:2011-03-24 09:13:54

标签: c++ memory file-io

我现在正处于嵌入式测量系统项目中。它使用ARM& linux,并具有64M内存和1G存储。测量时,应该将数据写入.csv文件。我是这样做的:

  1. 在开始测量之前创建/打开文件
  2. 在测量循环中,当数据准备就绪时,将其放入文件中,然后转到下一个测量
  3. 当用户停止测量时,文件将关闭
  4. 但是,当我添加此功能时,程序会持续运行几个小时,然后机器将不会响应任何内容(测量停止,UI仍然显示但不响应任何操作等)。而且csv文件大约是15MB。 没有此功能,机器可以整天运作良好。 我考虑过这个,也许是因为内存耗尽了。如此小的内存,是否可以继续写文件?或者我应该在每次写完数据时关闭它? (在这种情况下,我将不得不经常打开/关闭文件,这将导致我们的系统变慢,不高兴看到) 为我可怜的英语道歉,也许有人能理解它并给我一些帮助。 上帝照亮了你的道路,谢谢大家!

    ps:我确实认为文件操作本身是正确的。

    像这样的代码:

    std::ofstream out_put;
    out_put.open(filePath, std::ofstream::out | std::ofstream::trunc);
    
    while(!userStoped()){
    
        doSomeMesuring();
    
        for(int itemIndex = 0; itemIndex < itemCount; ++itemIndex){
        out_put << ',' << itemName.toStdString() << ',' 
                << data->mdata.item[itemIndex].mvalue << ',' 
                << data->mdata.item[itemIndex].judge << std::endl;
        }
    }
    
    out_put.close();
    

1 个答案:

答案 0 :(得分:2)

您写入'out_put',即ofstream,但从不检查流是否仍然有效。 您可以将其更改为

while (out_put.good() && (!userStoped())

为了向自己证明这是写入导致问题的流,写出所有测量代码,只需在流中写下大量的'x'(或你选择的字符!),看看是否你有相同的结果。