J'ai pensé à fsync() ne fflush() en interne afin d'utiliser fsync() sur un flux de données est OK. Mais j'obtiens le résultat inattendu lorsqu'il est exécuté sous réseau I/O.
Mon extrait de code:
FILE* fp = fopen(file,"wb");
/* multiple fputs() call 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);
Mais il semble _commit() n'est pas de rinçage les données (j'ai essayé sur Windows et les données ont été écrites sur Linux système de fichiers exporté).
Lorsque j'ai modifié le code comme:
FILE* fp = fopen(file,"wb");
/* multiple fputs() call like: */
fputs(buf, fp);
...
...
fputs(buf.c_str(), fp);
/* fflush the data */
fflush(fp);
fclose(fp);
Cette fois, il vide les données.
Je me demande si _commit() fait la même chose que fflush(). Toutes les entrées?