0
私は2つの外部センサーから読み取ったすべての生データを保存したファイルを書き、ファイルが2Gbになったときにプログラムのデータ書き込みが中断したことを認識しました。ファイル。2Gbを超えるファイルを書き込む
私は次のコードを使用しています(それが信号を待って、ファイルに書き込み、1つのスレッドです):
while(1)
{
//Lock, Wait the signal and unlock
pthread_mutex_lock(&mutex_WriteOFIMUandGPS);
pthread_cond_wait(&cond_WriteOFIMUandGPS, &mutex_WriteOFIMUandGPS);
X_CopySnapshot = X_Snapshot;
Y_CopySnapshot = Y_Snapshot;
Z_CopySnapshot = Z_Snapshot;
Vx_CopySnapshot = Vx_Snapshot;
Vy_CopySnapshot = Vy_Snapshot;
Vz_CopySnapshot = Vz_Snapshot;
HPL_CopySnapshot = HPL_Snapshot;
HDOP_CopySnapshot = HDOP_Snapshot;
StdPosX_CopySnapshot = StdPosX_Snapshot;
StdPosY_CopySnapshot = StdPosY_Snapshot;
StdPosZ_CopySnapshot = StdPosZ_Snapshot;
pthread_mutex_unlock(&mutex_WriteOFIMUandGPS);
//Get Time and Date
now = time(0);
localtm = localtime(&now);
//Get millis
gettimeofday(&tp, NULL);
ms = round(tp.tv_usec/1000);
sprintf(buf,"%03d",(int)ms);
//Empty strings
DateTime = "";
text.clear();
text.str(string());
//Store Data and Time information in a string
text << localtm->tm_year+1900 << "/";
text << (((localtm->tm_mon+1)<10) ? "0" : "") << localtm->tm_mon+1 << "/";
text << ((localtm->tm_mday<10)? "0" : "") << localtm->tm_mday << ",";
text << ((localtm->tm_hour<10)? "0" : "") << localtm->tm_hour << ":";
text << ((localtm->tm_min<10)? "0" : "") << localtm->tm_min << ":";
text << ((localtm->tm_sec<10)? "0" : "") << localtm->tm_sec << "."<< buf;
DateTime = text.str();
//Save data
fprintf(fid,"%s,"
"2,6,0," // Alg_ID,SolStatus,EGNOSStatus,
"%12.3f,%12.3f,%12.3f," // XyzUKF[0],XyzUKF[1],XyzUKF[2],
"%8.8f,%8.8f,%8.8f,%7.18f," // V_UKF[0],V_UKF[1],V_UKF[2],HPL,
"0,0,%5.2f,nan,nan,nan,nan," // NumSat,NumSatEx,HDOP,PDC1,PDC2,PDC3,PDC4,
"%7.2f,%7.2f,%7.2f," // StdPos[0],StdPos[1],StdPos[2]
"0,0,0," // StdVel[0],StdVel[1],StdVel[2],
"1,0," // TypePositioning[0],TechUsedPos,
"0,0,0,0,0," // Observables
"0,0,0,0,0," // Observables
"0,0," // VPL,VDOP
"0," // TechRec
"0,0,0,0,0," // Observables
"0,0,0,0,0\n", // Observables
DateTime.c_str(),
X_CopySnapshot, Y_CopySnapshot, Z_CopySnapshot,
Vx_CopySnapshot, Vy_CopySnapshot, Vz_CopySnapshot,HPL_CopySnapshot,
HDOP_CopySnapshot,
StdPosX_CopySnapshot, StdPosY_CopySnapshot, StdPosZ_CopySnapshot);
}
2Gbを越えるとどのようにファイルを書き込むためのどのような方法があるかどうか私にはわかりません私はそれを達成すべきです。
ご協力いただきありがとうございます。
32bit int issueのような音... Cでfwriteを使用すると[2GBのファイルサイズ制限がありますか?](http://stackoverflow.com/questions/730709/2gb-limit-on- file-size-when-fwrite-in-c) –
どのOSを使用していますか? – alk
ファイルサイズに2Gの制限があるファイルシステムを使用しているのでしょうか?脂肪? –