I guess you need to call fflush()
to flush the changed to the file system.
See also difference between fsync() and fflush().
문제
I have two (POSIX) threads that write to a log file like this:
pthread_mutex_lock(&log_mutex);
fprintf(LOG, "something...\n");
fsync(fileno(LOG));
pthread_mutex_unlock(&log_mutex);
The file is opened in main()
with fopen()
with mode "a". While the process is running I can't see anything appearing in the file with cat
or tail
although after the process is terminated and the file is fclose()
-ed, the lines are all there.
What am I doing wrong?
해결책
I guess you need to call fflush()
to flush the changed to the file system.
See also difference between fsync() and fflush().
다른 팁
Since you are using FILE handle in C, you need to first flush the data from C/C++ buffers to kernel buffers by calling fflush(). fsync is not really required unless you also want to make sure the data reaches the underlying physical storage especially for durability concerns