- 论坛徽章:
- 4
|
楼上正解.
- NAME
- fsync, fdatasync - synchronize a file’s in-core state with storage device
- SYNOPSIS
- #include <unistd.h>
- int fsync(int fd);
- int fdatasync(int fd);
- Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
- fsync(): _BSD_SOURCE || _XOPEN_SOURCE
- || /* since glibc 2.8: */ _POSIX_C_SOURCE >= 200112L
- fdatasync(): _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500
- DESCRIPTION
- fsync() transfers ("flushes") all modified in-core data of (i.e., modified buffer cache pages for) the file referred to by the file descriptor
- fd to the disk device (or other permanent storage device) so that all changed information can be retrieved even after the system crashed or was
- rebooted. This includes writing through or flushing a disk cache if present. The call blocks until the device reports that the transfer has
- completed. It also flushes metadata information associated with the file (see stat(2)).
- Calling fsync() does not necessarily ensure that the entry in the directory containing the file has also reached disk. For that an explicit
- fsync() on a file descriptor for the directory is also needed.
- fdatasync() is similar to fsync(), but does not flush modified metadata unless that metadata is needed in order to allow a subsequent data
- retrieval to be correctly handled. For example, changes to st_atime or st_mtime (respectively, time of last access and time of last modifica-
- tion; see stat(2)) do not require flushing because they are not necessary for a subsequent data read to be handled correctly. On the other
- hand, a change to the file size (st_size, as made by say ftruncate(2)), would require a metadata flush.
- The aim of fdatasync() is to reduce disk activity for applications that do not require all metadata to be synchronized with the disk.
复制代码 |
|