How to sync a file on FreeBSD?

Alexander Best arundel at freebsd.org
Fri Jul 22 12:10:38 UTC 2011


On Fri Jul 22 11, C. P. Ghost wrote:
> On Fri, Jul 22, 2011 at 8:44 AM, Unga <unga888 at yahoo.com> wrote:
> > Hi all
> >
> > How to sync a file on FreeBSD (esp. on 8.1) to disk?
> >
> > I used fsync(2), but does not immediately flush to disk.
> >
> > I want my writing to a file (a log file) immediately available to other users to read.

if you *really* want to see data being written to disk immediately and don't
care about performance, do the following:

1) disable the write cache of your hdd (see ada(4) and ata(4) man pages)

2) mount your partition(s) with '-o sync'

cheers.
alex

> 
> It shouldn't matter: as soon as write(2) completes, the
> system-wide file cache -- not the disk -- is updated, and
> other users will transparently read(2) from that cache,
> not from the disk.
> 
> What you probably want is to flush the userspace buffers
> of your I/O library as soon as you write a line of output:
> See fflush(3), set[v]buf(3)... You may also use a non-buffered
> stream for writing logs.
> 
> fsync(2) has other uses. In particular, it is of NO use as
> long as the logging application doesn't flush its I/O caches
> itself.
> 
> > Best regards
> > Unga
> 
> -cpghost.
> 
> -- 
> Cordula's Web. http://www.cordula.ws/


More information about the freebsd-questions mailing list