加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c语言的sqlite3接口的设计

发布时间:2020-12-12 20:02:56 所属栏目:百科 来源:网络整理
导读:sqlite3相当强大的一个sql数据库,源代码3w多行,最近看了看里面的源码,感觉里面有很多用得上的地方 1.sqlite3_file接口的设计,看着是不是跟frontc一样(第一版的c转c++翻译器) typedef struct sqlite3_io_methods sqlite3_io_methods; struct sqlite3_io

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*,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,void **pp);
int (*xUnfetch)(sqlite3_file*,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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读