ARM嵌入式Linux(AM335x),文本文件内容在关机后删除

时间:2016-11-02 08:52:42

标签: c++ linux qt arm embedded-linux

内核:3.12.30-AM335x-PD15.2.1(由PHYTEC提供)

我的应用程序需要在运行时编辑文本文件,并在下次启动时使用它。所以我创建了一个文本文件,在其中我写了一个简单的文本,"禁用"或"启用"使用我用QT C ++编写的程序。

我意识到,在程序写完简单文本后,如果我使用命令" reboot"在bash上,等待程序重新启动,然后关闭系统电源(通过拔掉电缆)," cat TextFile.txt"命令产生"启用"或"禁用",无论程序最后一次正确写入。

但是,如果我没有重新启动并立即关闭系统电源,然后重新打开电源,文本文件仍会保留,但内容将被删除,因此" cat TextFile.txt"什么都不产生。

我尝试使用以下方法手动执行相同的操作:

方法1:

echo Disable > TextFile.txt
reboot
.....wait for it to reboot
cat TextFile.txt

The results is "Disable".

方法2:

echo Disable > TextFile.txt
.. power off by plugging off the cable
.. power on the system
cat TextFile.txt

No resulting text..

我根本不想重新启动系统以保存文件。因此,我很乐意在QT C ++程序中执行命令,以便在不重启的情况下保存所有内容。但我不太了解操作系统,因此我不知道为了能够做到这一点我应该做些什么。

顺便说一句,这是我的代码:

QFile file(filename);
    // Trying to open in WriteOnly and Text mode
    if(!file.open(QFile::WriteOnly |
                  QFile::Text))
    {
        qDebug() << " Could not open file for writing";
    }

    // To write text, we use operator<<(),
    // which is overloaded to take
    // a QTextStream on the left
    // and data types (including QString) on the right

    QTextStream out(&file);
    out << "Enable";
    file.flush();
    file.close();

1 个答案:

答案 0 :(得分:2)

由于您在shell上的经验表明这不是严格意义上的c ++或Qt问题,因此该文件不会立即写入磁盘。

系统设置可能使用延迟写入来优化磁盘访问时间,即首先写入内存缓冲区并每隔一段时间写入实际磁盘。

如果您有其他程序可以写入文件并且期望断电是一个真实的场景,那么您可能需要调整它。

现在,对于有问题的Qt程序,您可以尝试使用QSaveFile代替QFile,其commit()会要求系统实际同步到磁盘。