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

C++ ARM嵌入式Linux(AM335x),关机后删除文本文件内容,c++,linux,qt,arm,embedded-linux,C++,Linux,Qt,Arm,Embedded Linux,内核:3.12.30-AM335x-PD15.2.1(由PHYTEC提供) 我的应用程序需要在运行时编辑一个文本文件,并在下次开机时使用它的内容。因此,我创建了一个文本文件,其中我用QT C++编写的程序编写一个简单的文本“禁用”或“启用”。p> 我意识到的是,在程序写入简单文本后,如果我在bash上使用命令“reboot”,并在关闭系统电源之前等待程序重新启动(通过拔掉电缆),“cat TextFile.txt”命令将生成“Enable”或“Disable”,以程序最后正确写入的为准 但是,如

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

我的应用程序需要在运行时编辑一个文本文件,并在下次开机时使用它的内容。因此,我创建了一个文本文件,其中我用QT C++编写的程序编写一个简单的文本“禁用”或“启用”。p> 我意识到的是,在程序写入简单文本后,如果我在bash上使用命令“reboot”,并在关闭系统电源之前等待程序重新启动(通过拔掉电缆),“cat TextFile.txt”命令将生成“Enable”或“Disable”,以程序最后正确写入的为准

但是,如果我不重新启动并立即关闭系统电源,然后再次打开电源,文本文件将保留,但内容将被删除,因此“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();
QFile文件(文件名);
//正在尝试以WriteOnly和Text模式打开
如果(!file.open)(QFile::WriteOnly|
QFile::Text)
{

当你在shell上的体验表明这不是严格的C++或QT问题时,文件就不会马上写入磁盘。 系统设置可能使用延迟写入来优化磁盘访问时间,即先写入内存缓冲区,然后每隔一段时间写入实际磁盘

如果您有其他编写文件的程序,并且预期断电是一种现实情况,那么您可能需要对此进行调整


现在,对于所讨论的Qt程序,您可以尝试使用
QSaveFile
而不是
QFile
,它的
commit()
要求系统实际同步到磁盘。

拔掉计算机上的插头导致数据丢失并不令人意外。就如何使用Linux而言,重新启动基本上是一种非常昂贵的运行方式。我如何调整它?我真的需要在最多1分钟内保存文件。我将立即尝试QSaveFile.QSaveFile excel很明显,这正是我所需要的,谢谢:)调优:这取决于正在使用的文件系统:通常通过装载选项,但有些可能需要在内核构建时设置值