2016-11-02 7 views
1

カーネル:3.12.30-AM335x-PD15.2.1(PHYTECによる)ARM、電源投入後に削除されたテキストファイルの内容オフ

私のアプリケーションは、実行時にテキストファイルを編集し、それに内容を使用する必要があります次に電源を入れます。そこで私はQT C++で書いたプログラムを使って、単純なテキスト "Disable"または "Enable"を書くテキストファイルを作成しました。

私が気づいたのは、プログラムがシンプルテキストを書き込んだ後、bashで "reboot"コマンドを使用して、システムの電源を切る前にプログラムを再起動するのを待ちます。 「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++プログラム内でコマンドを実行して再起動せずにすべてを保存することに満足しています。しかし、私はオペレーティングシステムをよく知っていないので、私はこれを行うことができるようにする必要があるのか​​分かりません。

これは、方法によって、私のコードの私です:シェル上ごexperiementが、これは厳密にはC++やQtの物ではないことが示されていたよう

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

コンピュータでプラグを引っ張ってもデータが失われることは驚くべきことではありません。 Linuxの使い方では、再起動は基本的には非常に高価な['sync'](http://man7.org/linux/man-pages/man1/sync.1.html)を実行する方法です。 – Notlikethat

答えて

2

、ファイルがちょうどすぐにディスクに書き込まれていません。

システムのセットアップは、おそらく、すなわち、最初に、メモリバッファに書き込み、しばらく毎に一度実際のディスクへの書き込み、ディスクのアクセス時間を最適化するために、遅延書き込みを使用しています。

あなたがファイルを書き込むと、現実的なシナリオとして、電力損失を期待する他のプログラムを持っている場合は、そのチューニングしたい場合があります。

ここで、問題のQtプログラムの場合、QFileの代わりにQSaveFileを使用できます。そのcommit()は、システムに実際にディスクに同期するように要求します。

+0

どうすれば調整できますか?私は本当に1分でファイルを保存する必要があります。私は今QSaveFileを試みます。 – etugcey

+0

QSaveFileはうまく動きました。私が必要としていただけのことです。ありがとうございました:) – etugcey

+0

チューニング用:使用中のファイルシステムによって異なります。マウントオプションを使用することが多いが、カーネル構築時に値を設定する必要がある –

関連する問題