上一篇讲过unixODBC的两个配置文件,和通过unixODBC连接对应的数据库,那么具体的源码层面,unixODBC是如何实现的呢?
如果熟悉动态链接库的同学,可能知道动态链接库的两种打开方式,一种是通过Makefile,进行gcc编译的时候,指定so库,-lpthread
这种,将libpthread.so
链接库加载进来。另外一种就更方便了,通过调用dlopen和dlsym函数来将动态库里面的函数加载进来。(关于这方面,我后面文章会单独进行补充,还有系统的钩子函数)
查看源码,我们发现,unixODBC也是通过使用dlopen和dlsym将实际的数据库驱动加载进来。所以,你要说,unixODBC和各个数据库驱动之间有什么关系,相当于unixODBC给各个数据库驱动c语言版本,提供了一套标准,大家的函数名都要这么叫,大家的函数参数和实现的功能都应该一样。但是具体内部各个数据库的实现,以及涉及到的结构体和底层的网络封装之类的,可以各有差异(反正unixODBC只是通过函数指针指过去,有点类似c++里面的 private value 和 get方法)。所以呢,没有各个数据库的驱动是不行的,通过unixODBC是连接不进去滴。
网友评论