I thought fsync() does fflush() internally so using fsync() on a stream is OK. But i am getting unexpected result when executed under network I/O.
My 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);
But it seems _commit() is not flushing the data (i tried on Windows and the data was written on Linux exported filesystem).
When i changed the code as:
FILE* fp = fopen(file,"wb");
/* multiple fputs() call like: */
fputs(buf, fp);
...
...
fputs(buf.c_str(), fp);
/* fflush the data */
fflush(fp);
fclose(fp);
This time it flushes the data.
I am wondering if _commit() does the same thing as fflush(). Any inputs?