2020年4月14日火曜日

[Linux] アプリからSDカード上のファイルライトしたデータが反映されない

こんにちは

ソフトな道をほのぼのと今日も歩きます。


今回は、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 件のコメント:

コメントを投稿