2011-07-12 3 views
0

Суть моей проблемы в том, что я не могу записать файл в цикл со сном(). Если у меня есть следующий код:Невозможно записать файл в цикл, содержащий sleep()

ofstream file 
file.open("file.name"); 

for(;;) { 
    file << "HELLO\n"; 
} 

Этот код отлично работает и печатает HELLO повторно в «file.name». Тем не менее, я хочу сделать что-то вроде этого (я запись данных из приложения реального времени):

for(;;) { 
    file << "HELLO\n"; 
    sleep(1); 
} 

Это не похоже, чтобы напечатать что-либо в моем файле. Есть идеи?

+0

Как тег «C» будет удален? – KevinDTimm

+0

@KevinDTimm - редактируя вопрос :-) – Roddy

+0

@Roddy - я пробовал это, не видел, как .... (oops, nevermind ---) – KevinDTimm

ответ

6

Вам необходимо очистить выход. Выходной поток буферизует ваши данные в память, но не записывает их на диск. Вы должны либо использовать std::endl (который печатает строку и флеши) вместо строкового литерала '\n', или явно промывать поток с std::flush:

for(;;) { 
    file << "HELLO" << endl; 
} 
// or 
for(;;) { 
    file << "HELLO\n" << flush; 
} 
+0

Отлично, спасибо! В то же время я быстро исправился, многократно открывая и закрывая дескриптор файла на каждой итерации цикла, который должен был выполнить флеш. – vette982

3

Волшебное слово, которое вы ищете, является «флешем».

c++ std::ofstream flush() but not close()

перед сном, смывать файл так, что он не находится на рассмотрении в буфере, ожидая там, чтобы быть достаточно изменения заморачиваться выписывать.

2

Это, вероятно, проблема буферизации. Поскольку вы сейчас записываете гораздо медленнее, выходной буфер не будет заполняться так быстро, чтобы вы не могли «видеть» записанные данные. Попробуйте добавить flush() перед сном.

file.flush() 
Смежные вопросы