내 프로그램에는 initUSB()를 실행 한 후 writeEssentials()를 여러 번 실행하는 루프가 있습니다. initUSB()는 USB를 디렉토리에 마운트하는 함수입니다. writeEssentials()는 파일을 열고 데이터와 함께 추가 한 다음 파일을 닫는 함수입니다.프로그램 실행 중에 읽기 전용으로 변환되는 파일 시스템
프로그램을 처음 실행 한 후 1 분 정도 지나면 프로그램은 파일 시스템이 "읽기 전용"이라고보고하고 initUSB()가 다시 실행될 때까지 더 이상 데이터 쓰기를 거부합니다. 이것은 날씨 또는 파일 포인터에 fprintf()가 발생하지 않습니다. 임시 해결 방안으로 writeEssentials()가 읽기 전용으로 설정된 경우 드라이브를 다시 마운트했습니다. 이 방법이 효과적이지만 매분마다 드라이브를 다시 마운트하지 않을 것입니다.
왜 이런 일이 발생하며 어떻게이 오류를 해결할 수 있습니까?
이 프로그램은 TS-7800의 데비안 임베디드 리눅스 시스템에서 실행됩니다.
InitUSB :
int initUSB(){
int i;
FILE * filecheck = fopen(HMITelemCheckFile, "r");
for(i = 0; i < 26; i++) {
char usbMountFromPathTry[256];
char sdanum[5];
strcpy(usbMountFromPathTry, usbMountFromPath);
sprintf(sdanum, "%c1", i+'a');
strcat(usbMountFromPathTry, sdanum);
if(!mount(usbMountFromPathTry, usbMountToPath, "vfat", (long)NULL, NULL)){
printf("Mount successful\n");
return 1;
} else if(!mount(usbMountFromPathTry, usbMountToPath, "vfat", MS_REMOUNT, NULL)){
printf("Mount successful\n");
return 1;
}
printf("Mount error: ");
printf("%s\n", usbMountFromPathTry);
}
printf("Mount ERROR\n");
return 0;
}
writeEssentials() :
void writeEssentials(){
FILE * file = fopen(usbMountEssentials, "a+");
fflush(file);
perror("file");
if(file == NULL){
initUSB();
printf("null file\n");
return;
}
fprintf(file, "\n%s, ", getDate());
fprintf(file, "%s, ", getTime());
fprintf(file, "%1.2f, ", getSpeed());
fprintf(file, "%d, ", getRPM());
fprintf(file, "%d, ", getRegen());
fprintf(file, "%d, ", getAirgap());
fprintf(file, "%d, ", getBattery());
fprintf(file, "%.2f, ", *(getADCTemps()+COMPUTER_BOX_TEMP_INDEX));
fprintf(file, "%.2f, ", *(getBMS()+BMS_TEMP_INDEX+(BMS_NUM_VAR*0)));
fprintf(file, "%.2f, ", *(getBMS()+BMS_TEMP_INDEX+(BMS_NUM_VAR*1)));
fprintf(file, "%.2f, ", *(getBMS()+BMS_TEMP_INDEX+(BMS_NUM_VAR*2)));
fprintf(file, "%.2f, ", *(getMPPT()+MPPT_TEMP_INDEX+(MPPT_NUM_VAR*0)));
fprintf(file, "%.2f, ", *(getMPPT()+MPPT_TEMP_INDEX+(MPPT_NUM_VAR*1)));
fprintf(file, "%.2f, ", *(getMPPT()+MPPT_TEMP_INDEX+(MPPT_NUM_VAR*2)));
fprintf(file, "%.2f, ", *(getMPPT()+MPPT_TEMP_INDEX+(MPPT_NUM_VAR*3)));
fprintf(file, "%s, ", getLat());
fprintf(file, "%s, ", getLong());
int i;
for(i = 0; i < getNumErrors(); i++){
//fprintf(file, "%s, ", getErrorText(*(getErrors()+i)));
}
fclose(file);
perror("close file error");
}
, 그것은 오류'FAT했다 : 읽기 전용 - '그래서 난 도망 파일 시스템이 설정되어 클러스터 심하게 계산 된 파일 시스템 패닉 (dev에 sda1과) (! 245 = 244)'fsck를 -r/dev/sda1', 그리고 지금은 작동하는 것 같습니다. 고맙습니다! – Reid