自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Sqlite源码解读(十四)

2021SC@SDUSC上篇讲了文件操作和查找系统通用协调时间,最后一部分讲sqlite操作系统的接口。除了几个数据结构和#define,SQLite 3.0的API包括了83个独立的函数。(一个完整的API参考作为一个独立的文档提供。)幸运的是,接口不是与它所显示的大小一般复杂。简单的程序仍可以通过仅仅三个函数工作:sqlite3_open()、sqlite3_exec()和sqlite3_close()。更多的数据库引擎运行控制可以用sqlite3_prepare()来编译一个SQLite语

2021-11-29 14:54:05 963

原创 Sqlite源码解读(十三)

2021SC@SDUSC接着上次继续看文件操作。删除命名文件static int winDelete( sqlite3_vfs *pVfs, /*未用于win32 */ const char *zFilename, /* 要删除的文件名*/ int syncDir /* 未用于 win32 */){ int cnt = 0; int rc; DWORD attr; DWORD lastE...

2021-11-29 14:00:04 820

原创 Sqlite源码解读(十二)

2021SC@SDUSC第八篇到第十一篇讲解了所有sqlite3_file方法的实现。接下来是Sqlite的OS Interface部分收尾阶段。首先是定义了win32一些vfs方法的两个向量。/*该向量定义了对Win 32的sqlite 3_file进行操作的所有方法。*/static const sqlite3_io_methods winIoMethod = { 3, /* 版本号 */ winClose,...

2021-11-25 08:44:17 718

原创 Sqlite源码解读(十一)

2021SC@SDUSC接着winShmNode继续讲。PShmNode上的引用计数已经在winShmEnterMutex()互斥体的覆盖下递增,并且指向pShmNode的新对象的指针已经设置。剩下要做的就是将新对象链接到从pShmNode->pFirst开始的链接列表中,这必须在持有pShmNode->mutex互斥时完成。 sqlite3_mutex_enter(pShmNode->mutex); p->pNext = pShmNode->pFirst;..

2021-11-24 17:25:54 866

原创 Sqlite源码解读(十)

2021SC@SDUSC接着LockFile继续讲解关于锁的内容。如果*pArg最初是负的,那么这就是一个查询。将*pArg设置为1或0,这取决于是否设置了pfile->ctrlFlags的位掩码。如果*pArg为0或1,则清除或设置pfile->ctrlFlags的掩码位。static void winModeBit(winFile *pFile, unsigned char mask, int *pArg){ if( *pArg<0 ){ *pArg =...

2021-11-24 14:55:35 920

原创 Sqlite源码解读(九)

2021SC@SDUSC上次讲解了实现sqlite3_io_method对象指定的I/O方法的一组例程。接来下一组例程将执行检查所有进程是否在指定文件上有特定锁、设置锁、解锁等操作。首先我们先了解LockFile和LockFileEX函数。过去,SQLite使用了LockFile和LockFileEx函数。当使用LockFile函数时,如果无法获得锁,则总是预期它会立刻失败。而且,它总是期望获得独占锁——但这并不是我们想要的。于是现在SQLite从不调用LockFileEx函数:如果无法获得锁,则不

2021-11-22 14:07:56 760

原创 Sqlite源码解读(八)

2021SC@SDUSC上次讲解了SQLITE_OS_WINCE部分。接来下一组例程将实现sqlite3_io_method对象指定的I/O方法。/*有些微软编译器缺少这个定义*/#ifndef INVALID_SET_FILE_POINTER# define INVALID_SET_FILE_POINTER ((DWORD)-1)#endif移动作为第一个参数传递的文件句柄的当前位置,以在文件中偏移iOffset。如果成功,则返回0。否则,设置pfile->lastErr

2021-11-22 14:05:14 417

原创 Sqlite源码解读(七)

2021SC@SDUSC上次讲了各种字符串相互转换的方法及对应的公共包装器,接下来将讲解SQLITE_OS_WINCE,即sqlite在操作系统WinCE上的代码。获取手柄上的锁static void winceMutexAcquire(HANDLE h){ DWORD dwErr; do { dwErr = osWaitForSingleObject(h, INFINITE); } while (dwErr != WAIT_OBJECT_0 &&...

2021-11-15 14:31:49 1037

原创 Sqlite源码解读(六)

2021SC@SDUSC前面几篇详细讲解了VFS的内存分配和共享缓存机制。本篇将详细介绍各种字符串相互转换的方法及基于这些方法的公共包装器。先看一个将UTF-8字符串与Microsoft Unicode相互转换的方法,由sqlite3_malloc()提供保存返回字符串的空间。/*将utf-8字符串转换为microsoft Unicode。*/static LPWSTR winUtf8ToUnicode(const char *zText){ int nChar; L..

2021-11-10 19:54:44 1178

原创 Sqlite源码解读(五)

2021SC@SDUSC第四篇深入拓展了第三章讲的malloc()方法,详细讲解了VFS的内存分配和共享缓存机制,本篇将继续深入Windows的内存分配。先接着第三篇后面继续看源码。在第三篇末,由于主锁和memsys锁目前都已由我们持有,因此没有其他函数能够访问堆。现在我们尝试销毁和重新创建我们的孤立的Win 32本机堆。if( winMemGetHeap()!=NULL && winMemGetOwned() && sqlite3_memory_used()==0

2021-10-25 19:25:30 443 2

原创 Sqlite源码解读(四)

2021SC@SDUSC上次讲了Sqlite分配内存的malloc()方法,free(),remalloc();Win32特定堆的最大初始大小,计算初始大小时所用的缓存大小,根据初始堆和默认页大小计算最大合法缓存大小;数组aSyscall[]用来保存所有可重写系统调用的名称和指针;以及用语所有Win32 VFSes的很重要的xSetSystemCall()方法。接下来介绍VFS的内存分配和共享缓存机制VFS的IO接口里提供了文件的共享缓存机制。该机制通过在test_vfs里内置一个Sha

2021-10-21 22:49:10 448

原创 Sqlite源码解读(三)

2021SC@SDUSC接着上次的winVfsAppData结构体继续往下看。#ifdef SQLITE_WIN32_MALLOCmalloc()是Sqlite在缺省情况下调用C标准库例程来分配内存的。如果这不是零,则本机Win 32分配器子系统将创建一个孤立的堆;否则,将使用默认的进程堆。此设置在为WinRT编译时没有任何影响。默认情况下,这是启用的,并且将创建一个独立的堆来存储所有分配的数据此处出现了一个warning:当设置为非零并且调用了winMemShu倒计时函

2021-10-18 21:45:58 654

原创 Sqlite源码解读(二)

本篇开始解读代码:开头一堆注释主要说明此文件是基于Windows NT操作系统内核(区分于Unix)开始分析代码:#if !SQLITE_OS_WINNT && !defined(SQLITE_OMIT_WAL)# error "WAL mode requires support from the Windows NT kernel, compile\with SQLITE_OMIT_WAL."如果不是windows NT 操作系统且没有引入WAL模式,则会报错。..

2021-10-10 21:30:07 1526

原创 Sqlite源码解读(一)

Sqlite源码解读一本博客系列将在接下来的三个月内开始对Sqlite的部分源码进行解读。Sqlite源码解读部分将由

2021-09-28 20:31:37 3500

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除