Unterschied zwischen fflush und fsync

Dachte ich fsync() fflush() intern mit fsync() auf einem stream ist OK. Aber ich bin immer unerwartetes Ergebnis bei der Ausführung unter Netzwerk-I/O.

Mein code-snippet:

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);

Aber es scheint _commit() ist nicht das Spülen der Daten (ich habe versucht, auf Windows und die Daten wurde geschrieben, auf Linux exportierten Dateisystem).

Wenn ich änderte den code:

FILE* fp = fopen(file,"wb");
/* multiple fputs() call like: */
fputs(buf, fp);   
...   
...
fputs(buf.c_str(), fp);
/* fflush the data */
fflush(fp);
fclose(fp);

Dieser Zeit und es spült die Daten.

Frage ich mich, ob _commit() tut das gleiche wie fflush(). Alle Eingänge?

InformationsquelleAutor der Frage Adil | 2010-02-26

Schreibe einen Kommentar