こんにちは
ソフトな道をほのぼのと今日も歩きます。
今回は、Linux アプリでSDカード上のファイルへライトした直後に
SDカードを抜くと、SDカードライトしたデータが反映されない
現象になっていました。
ライトしたはずのデータが、文字化けしたり、
途中からごっそりなくなっている。そういうような状態でした。
こちらの現象を解決できたのでアップします。
以下、非常に役に立ったリンク先になります。
http://oswald.hatenablog.com/entry/20101223/1293064800
ポイントはfwrite()した後に、以下3つを行うことでした。
1. fileno()より"fdatasync()"用の番号を取得する。
2. fflush()を行う。
3. fdatasync()を行う。
です。
下記参考サンプルです。
===============================================================
#include <unistd.h>
#define NORMALEND 0
int test(void)
{
FILE *fp; //ファイルポインター
unsigned char buf[30];
int rtc;
memset(buf, 0, sizeof(buf));
fp = fopen("/var/test.log","a"); //ファイルを開く
int fp_num = fileno(fp);
sprintf(buf, "dummy data %d \n", 1 );
length= strlen(buf);
fwrite(buf, length, 1, fp);
rtc = fflush(fp);
rtc= fdatasync(fp_num);
fclose(fp); //ファイルを閉じる
return NORMALEND;
}
[環境]
私の使用環境は VMware 上でUbuntu14.04を使用しています。
コンパイラ: arm-linux-gnueabihf-gcc
在宅ワークを開始しました。
残業代は出ないし、出るにしても非常に面倒な手続きが必要のようです。
ただ、外食もせず、子供の塾代やお稽古事もない状態なので
収支としてはトントンだと思います。
政府の30万円愚策はやらなくていいから、
所得税を控除してもらいたいです。
僕らの税金を返してください。
0 件のコメント:
コメントを投稿