sqlite3相当强大的一个sql数据库,源代码3w多行,最近看了看里面的源码,感觉里面有很多用得上的地方
1.sqlite3_file接口的设计,看着是不是跟frontc一样(第一版的c转c++翻译器)
typedef struct sqlite3_io_methods sqlite3_io_methods;
struct sqlite3_io_methods {
int iVersion;
int (*xClose)(sqlite3_file*);
int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
int (*xSync)(sqlite3_file*, int flags);
int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
int (*xLock)(sqlite3_file*, int);
int (*xUnlock)(sqlite3_file*, int);
int (*xCheckReservedLock)(sqlite3_file*, int *pResOut);
int (*xFileControl)(sqlite3_file*, int op, void *pArg);
int (*xSectorSize)(sqlite3_file*);
int (*xDeviceCharacteristics)(sqlite3_file*);
/* Methods above are valid for version 1 */
int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
void (*xShmBarrier)(sqlite3_file*);
int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
/* Methods above are valid for version 2 */
int (*xFetch)(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp);
int (*xUnfetch)(sqlite3_file*, sqlite3_int64 iOfst, void *p);
/* Methods above are valid for version 3 */
/* Additional methods may be added in future releases */
};
调用方法,如下,将调用结构体自己传入
rc = lockProxy->pMethod->xClose((sqlite3_file*)lockProxy);
rc = conchFile->pMethod->xClose((sqlite3_file*)conchFile);

本文详细介绍了SQLite3中sqlite3_file接口的设计理念及其具体实现方式。通过对源代码的深入分析,文章展示了该接口如何通过一系列的方法来实现文件操作,如读写、同步、锁定等,并提供了具体的调用示例。

892

被折叠的 条评论
为什么被折叠?



