#define SQLITE_IOCAP_ATOMIC 0x00000001 #define SQLITE_IOCAP_ATOMIC512 0x00000002 #define SQLITE_IOCAP_ATOMIC1K 0x00000004 #define SQLITE_IOCAP_ATOMIC2K 0x00000008 #define SQLITE_IOCAP_ATOMIC4K 0x00000010 #define SQLITE_IOCAP_ATOMIC8K 0x00000020 #define SQLITE_IOCAP_ATOMIC16K 0x00000040 #define SQLITE_IOCAP_ATOMIC32K 0x00000080 #define SQLITE_IOCAP_ATOMIC64K 0x00000100 #define SQLITE_IOCAP_SAFE_APPEND 0x00000200 #define SQLITE_IOCAP_SEQUENTIAL 0x00000400 #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800 #define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000 #define SQLITE_IOCAP_IMMUTABLE 0x00002000 #define SQLITE_IOCAP_BATCH_ATOMIC 0x00004000
sqlite3_io_methods 对象的 xDeviceCharacteristics 方法返回一个整数,该整数是一个位值向量,表示保存 sqlite3_io_methods 所引用的文件的存储设备的 I/O 特性。
SQLITE_IOCAP_ATOMIC 属性表示所有大小的写入都是原子的。SQLITE_IOCAP_ATOMICnnn 值表示大小为 nnn 字节且与 nnn 的整数倍地址对齐的块写入是原子的。SQLITE_IOCAP_SAFE_APPEND 值表示当数据追加到文件时,先追加数据,然后扩展文件大小,而不是相反。SQLITE_IOCAP_SEQUENTIAL 属性表示信息按 xWrite() 调用的顺序写入磁盘。SQLITE_IOCAP_POWERSAFE_OVERWRITE 属性表示在崩溃或断电后重新引导后,应用程序级别写入的文件中唯一可能更改的字节,并且保证相邻字节(即使是同一扇区内的字节)不会更改。SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 标志表示当文件打开时无法删除。SQLITE_IOCAP_IMMUTABLE 标志表示文件位于只读介质上,即使是具有提升权限的进程也无法更改。
SQLITE_IOCAP_BATCH_ATOMIC 属性表示底层文件系统支持在 SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 和 SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 括起来的多个写操作时,原子地执行这些写操作。