fsync 或 fsync_range 子例程
用途
将文件中的更改写到永久存储器中。
库
标准 C 库 (libc.a)
语法
#include <unistd.h>
int fsync ( FileDescriptor)
int FileDescriptor;
int fsync_range (FileDescriptor, how, start, length)
int FileDescriptor;
int how;
off_t start;
off_t length;
描述
fsync 子例程使由 FileDescriptor 参数指定的打开文件中的所有修改后的数据保存到永久存储器。 从 Fsync 子例程返回时,所有更新都已保存在永久存储器上。
fsync_range 子例程导致将 FileDescriptor 参数指定的打开文件的指定范围内的所有修改后的数据保存到永久存储器。 从 fsync_range 子例程返回时,指定范围内的所有更新都已保存在永久存储器上。
此段引用了仅在 JFS 文件系统中可用的不推荐使用的功能。 直到另一个进程对此文件发出 fsync_range 或 Fsync 调用,或者在此文件上运行同步 写 子例程 (带有 O_SYNC 标志) 之后,才会将写入进程为延迟更新而打开的文件 (带有 0-DEFER 标志) 的数据写入永久存储器。 请参阅 fcntl.h 文件和 open 子例程,以分别获取 O_延迟 和 O_SYNC 标志的描述。
注: 当发出 fsync 子例程或调用失败时,必须打开由 FileDescriptor 参数标识的文件以进行写入。 在 BSD 系统中未强制实施此限制。 fsync_range 子例程不需要写访问权。
参数
| 项 | 描述 |
|---|---|
| FileDescriptor | 有效的打开文件描述符。 |
| 如何 | 指定该操作的处理特征。
|
| 启动 | 正在启动文件偏移量。 |
| 长度 | 所有高速缓存数据的长度或为零。 |
返回值
成功完成后, Fsync 子例程将返回值 0。 否则,返回值为-1,并设置errno全局变量来指示错误。
成功完成后, fsync_range 子例程将返回值 0。 否则,返回值为-1,并设置errno全局变量来指示错误。
错误代码
如果以下一个或多个条件成立,那么 Fsync 或 fsync_range 子例程不成功:
| 项 | 描述 |
|---|---|
| EIO | 从文件系统读取或写入文件系统时发生 I/O 错误。 |
| EBADF | FileDescriptor 参数不是打开用于写入的有效文件描述符。 |
| EINVAL | 该文件不是一个常规文件。 |
| EINTR | 该子例程被信号中断。 |