2013-03-17 4 views
4

У меня есть два (POSIX) потоков, запись в лог-файл, как это:FSYNC не записывает данные в файл

pthread_mutex_lock(&log_mutex); 
fprintf(LOG, "something...\n"); 
fsync(fileno(LOG)); 
pthread_mutex_unlock(&log_mutex); 

файл открыт в main() с fopen() с режимом «в». Пока процесс выполняется, я ничего не вижу в файле с cat или tail, хотя после завершения процесса и файла fclose() -ed все строки там.

Что я делаю неправильно?

+2

Возможно [вы хотите использовать fflush()] (http://stackoverflow.com/questions/2340610/difference -between-fflush-и-FSYNC)? –

ответ

1

Поскольку вы используете дескриптор FILE в C, вам необходимо сначала очистить данные от буферов C/C++ до буферов ядра, вызвав fflush(). fsync действительно не требуется, если вы также не хотите, чтобы данные попадали в базовое физическое хранилище, особенно для обеспечения долговечности.