Я думал, что 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()
. Любые входы?