2016-04-28 6 views
-2

Я написал программу o, которая должна работать во время цикла while. В цикле программа должна сохранить некоторые данные для файла и закрыть этот файл. В цикле есть функция сна, которая выполняет спящую программу в течение 10 секунд. Затем я хочу проверить, что находится в файле, но он пуст. Если программа работать без контура все ОКПрограмма C не сохраняет файл во время цикла

Полный код довольно огромен, так что я включать в себя короткую версию

main() 
{ 
    FILE* fp; 
    while(1) 
    { 
     fp=fopen(SAVE_FILE, "awt"); 
     if(fp==NULL) 
     { 
      printf("Error while opening the save file \n"); 
     } 
     fprintf(fp, "%s",'this is saved text'); 
     fclose(fp); 
     sleep(10); 
    } 
} 

есть идеи, как закрыть этот файл правильно, чтобы быть в состоянии читать ДАННЫЕ В то время как functiion сон ?

(Это работает на Linux)

+2

Режимы 'a' и' w' являются взаимоисключающими. Вы можете удалить 'w' и перепроверять? – wRAR

+2

Не имеет прямого отношения к вашему вопросу, но 'printf (« Ошибка при открытии файла сохранения \ n »);' следует следовать 'continue;'., Иначе вы получите 'fprintf (fp, .. .) 'где' fp'is 'NULL'. –

+0

wRAR это не помогает – kmbm

ответ

1

Ваш код должен быть

int main() 
{ 
    FILE* fp; 
    while(1) 
    { 
     fp=fopen(SAVE_FILE, "at"); 
     if(fp==NULL) 
     { 
      printf("Error while opening the save file \n"); 
     } 
     else 
     { 
      fprintf(fp, "%s\n","this is saved text"); 
      fclose(fp); 
     } 
     sleep(10); 
    } 
} 

Вы написали строку, сохраненную между '. Вы должны использовать " для строковых литералов.

Кроме того, вы можете открыть файл с опцией.

При компиляции всегда следует использовать опцию -Wall. gcc показывает вам предупреждение для вашего кода.

test.c:662:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=] 
     fprintf(fp, "%s",'this is saved text'); 
+2

Возможно, вы захотите редактировать, чтобы включить 'continue;' в оператор if, то причиной отказа открыть файл вызовет некоторые интересные проблемы, поскольку он стоит –

+0

@LukePark, а также изменить ' fclose' to 'fsync'. –

+0

Предложение 'else' намного лучше, чем идея' continue'. Если вы удалите 'continue', программа не будет запущена, если' fopen'fails. –

Смежные вопросы