Я думал, что fsync() выполняет fflush() внутри, поэтому использование fsync() в потоке - это нормально. Но я получаю неожиданный результат при выполнении под сетевым вводом-выводом.
Мой фрагмент кода:
FILE* fp = fopen(file, "wb");
/* multiple fputs() calls like: */
fputs(buf, fp);
...
...
fputs(buf.c_str(), fp);
/* get fd of the FILE pointer */
fd = fileno(fp);
#ifndef WIN32
ret = fsync(fd);
#else
ret = _commit(fd);
fclose(fp);
Но, похоже, _commit() не _commit() данные (я пробовал в Windows, и данные были записаны в экспортированной файловой системе Linux).
Когда я изменил код, чтобы быть:
FILE* fp = fopen(file, "wb");
/* multiple fputs() calls like: */
fputs(buf, fp);
...
...
fputs(buf.c_str(), fp);
/* fflush the data */
fflush(fp);
fclose(fp);
это сбрасывает данные.
Мне интересно, если _commit() делает то же самое, что fflush(). Любые входы?