- 博客(107)
- 资源 (12)
- 收藏
- 关注
转载 PostgreSQL操作符与优化器详解
PostgreSQL 支持自定义操作符,本质上是调用函数来实现的。语法如下:例如创建一个求两个值的平均值的操作符:首选要创建函数postgres = # create function f_avg(numeric,numeric) returns numeric as $$postgres$# select ($1+$2)/2;postg
2016-06-26 08:31:43
1201
转载 三种动态hash方法
动态hash方法之一 本文将介绍三种动态hash方法。散列是一个非常有用的、非常基础的数据结构,在数据的查找方面尤其重要,应用的非常广泛。然而,任何事物都有两面性,散列也存在缺点,即数据的局部集中性会使散列的性能急剧下降,且越集中,性能越低。数据集中,即搜索键在通过hash函数运算后,得到同一个结果,指向同一个桶,这时便产生了数据冲突。通常解决数据冲突的方法
2015-11-25 11:40:40
1780
转载 PostgreSQL源码分析: 动态Hash
1. 为什么需要动态hash平常的hash,大多是下面这样一副面孔:图1 一个静态hash结构这种Hash维护着一些桶,就是图上左边的部分,每一个桶中装着hash值相同的数据。这些具有相同hash值的数据形成一个链表。这种hash的一个最主要缺点就是桶的数目是一定的,不易扩展,随着插入数据增多,查找效率会急剧下降。动态hash就是用来
2015-11-25 11:02:29
1472
转载 散列表的基本概念及其运算
参考文献: 《数据结构(C语言版)》 严蔚敏 吴伟民 编著 开发平台:Ubuntu11.04 编译器:gcc version4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 散列表(也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标
2015-11-24 14:02:00
899
转载 如何重新生成PostgreSQL的国际化文件
首先Postgresql源码中的gettext目录工具就是国际化使用的工具,关于gettext的使用在博客中有其他文章介绍,下面文章转自pg前辈权叔:首先,必须在编译前指定 --enable-nls="语言名",否则不会产生多语言支持,比如 --enable-nls="zh_CN"当然禁用nls会带来一点微不足道的性能提升启用之后我们在 Makefi
2015-11-18 09:26:15
697
转载 在Linux下开发多语言软件(gettext解决方案)
最近的项目出现了一个bug。项目是基于一个已有的成熟开源软件之上做修改的,新写了加解密库,用于为该成熟开源软件增添加解密功能。功能增加完成后效果都很好,可是就是中文出不来了,也就是说没办法自适应多语言环境了(提示信息在中文操作系统下是中文,英文操作系统下是英文)。使用strace -o log [要调试的命令]定位出了其在执行期间调用的语言包情况,发现它并没有调用自有的语言包,反而调用了加解密
2015-11-11 18:48:13
2219
转载 使用GNU gettext实现本地化语言支持
PS:本地化过程中使用的工具会在另一篇博客中介绍,相关的gettext工具:xgettext、msginit、msgfmt、msgmerge等为了便于操作,不必花费太多时间去阅读本文,我在最后简单地列出了步骤,如果不想看文章细节,就跳到最后,照着做就行。这篇文章是我翻译的,原作者和题目如下:A tutorial on Native Language Suppor
2015-11-11 18:03:54
1426
1
转载 (Socket编程中)getaddrinfo函数使用详解
getaddrinfo是在gethostbyname系列函数不支持Ipv6的情况下逐渐催生的,其能够处理名字到地址以及服务到端口这两种转换,返回一个sockaddr结构的链表,这些sockaddr地址结构随后可有套接口函数(socket、bind、connect、listen等)直接调用,将协议相关性隐藏在该函数内部。应该尽量选择使用getaddrinfo函数代替之前的getxx函数族,就像应该使
2015-10-28 00:54:28
6107
转载 socket select函数的详细讲解
原型int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,const struct timeval* timeout);nfds:本参数忽略,仅起到兼容作用。 readfds:(可选)指针,指向一组等待可读性检查的套接口。 writefds:(可选)指针,
2015-10-27 16:02:39
563
转载 Select函数在Socket编程中的使用
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式
2015-10-26 14:42:51
475
转载 socket通信简介
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的
2015-10-26 14:34:51
339
转载 Linux中通配符和正则表达式的区别
在看鸟哥的Linux私房菜的时候看到十二章一直强调通配符和正则表达式的区别,在我的理解中,两者貌似是一样的都是用来匹配的。Google之网上给出的答案是:在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的而通配符多用在文件名上,比如查找find,ls,cp,等等 下表是鸟哥给的Linux下的通配符 符號內容
2015-10-17 15:37:28
1057
转载 信号量 互斥锁 条件变量的区别(讲的很好,值得收藏)
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号量不
2015-10-15 23:12:48
496
转载 Linux线程同步:互斥量、条件变量的区别
互斥量:本质就是一把锁,所有锁类型都可能会产生死锁,所以在使用互斥量时程序员必须在逻辑上附加避免死锁的措施,这个典型避免死锁的措施就是:通过元素排序预防死锁,即多线程在互斥资源上必须按相同顺序加锁和解锁。条件变量:必须与互斥量配合使用,它可以以无竞争的方式访问资源,即,条件变量本身会预防死锁的产生。
2015-10-15 22:47:31
610
转载 postgresql存储引擎源码分析 五
在上一篇文章中,我们分析完了bufpage.c,今天我们来分析页面管理的第二个文件:itemptr.c。 这个文件里面只有两个函数,非常简短,这两个函数是对src\include\storage\itemptr.h文件中定义的结构体ItemPointerData的操作。下面,我们来看一看这个结构体: typedef struct ItemPointerData{
2015-10-11 15:18:11
654
转载 postgresql存储引擎源码分析四
上一次对bufpage.c文件已经分析了一大半了,今天这里准备对这个文件里面剩余的函数分析完全。 下一个函数,我们先来看看它的声明:Size PageGetExactFreeSpace(Page page)。这个函数的功能是返回页面page已经分配的空余大小空间,这个与昨天分析的函数PageGetExacFreeSpace函数的区别是它返回的space并不扣除一个ItemIdData
2015-10-11 15:12:27
637
转载 postgresql存储引擎源码分析三
在上一次的分析中,我们分析了验证页面是否有效的函数,向页面中添加元组项PageAddItem函数和一些其他函数的功能。接下来我们来分析其他的页面操作函数。 下一个函数,声明:void PageRestoreTempPage(Page tempPage,Page oldPage)。这个函数的功能是:将经过特殊处理过后的临时页面tempPage拷贝回oldPage中,随后将临时页面的内存
2015-10-11 15:06:10
758
转载 postgresql整体架构和存储引擎的大体分析
我上网查阅了一些资料,读了一些相关论文。现对PostgreSQL整体架构进行粗略的剖析一下,供大家参考: PostgreSQL的配置结构:PostgreSQL采用的是经典的C/S架构模型,主体是由一个守护监听进程Postmaster,若干个前端应用程序(比如PostgreSQL的客户端,DBMS等)和后段服务器进程(PostgreSQL服务器本身)所组成。大体宏观上的连接过
2015-10-11 14:55:14
4132
2
转载 postgresql存储引擎源码分析二
上次我分析了PostgreSQL存储系统页面管理的页面初始化函数PageInit,接下来的工作量相当大,由于源码有几十万行,如果像上次一样逐条语句分析的话,那么整体的篇幅是相当巨大的,语言也不容易组织。因此接下来的工作我准备对于每一个.c或者.h文件 的每个数据结构以及函数等整体代码块作出整体分析。下面我来对backend/storage/page/bufpage.c 中的剩余函数进行分析:
2015-10-11 14:06:22
707
转载 postgresql存储引擎源码分析一
PostgreSQL的存储系统作为PostgreSQL的最低层,向下通过操作系统系统接口访问物理数据,向上为存取系统提供由缓冲区页面及页面上的接口函数。存储系统的总体架构如下图所示(转自贵州大学硕士黄崇争毕业论文“开放源代码DBMS的分析,比较”) 注释:Lock Manager是锁管理器,I
2015-10-11 14:00:12
875
转载 postgresql架构图
上图是postgresql的总体架构图,下边是图中几个主要模块的功能简述,希望研究相应模块的同学给出模块的功能简介。 Postmaster:它主要负责在客户端第一次发送请求给服务器的时候建立一个服务器断进程。也就是上图中的Listener。(至今未发现postgresql中有listener,因此本图中的listener应该就是每一个客户端对应的服务器进程)postgre在完
2015-10-11 13:51:06
1274
1
转载 Linux链接概念
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。
2015-10-05 19:49:10
386
原创 虚拟内存与虚拟地址空间
第一部分:摘自:百度百科虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。虚拟内存是Windows 为作为内存使用的一部分
2014-12-05 01:33:59
1492
1
转载 Linux磁盘存储入门
Linux磁盘存储区管理算的上一个技巧,很多朋友在这上面常常问我,今天我就把这方面的东西汇总一下,从Linux特有的交换分区的原理开始介绍Linux磁盘存储区管理的原理及技巧。Linux磁盘存储区管理原理篇1. 交换空间是什么Linux 中的 交换空间(Swap space) 在物理内存(RAM)被充满时被使用。如果系统需要更多的内存资源,而物理内存已经充满,内存中不活跃的
2014-11-17 02:13:02
558
转载 Unix系统的三种缓冲区行缓冲、全缓冲、无缓冲(以及如何调整缓冲区的类型)
from unix系统编程 p91 练习4-22下面的程序会产生什么样的输出呢?#include #include int main(){ printf("This is my output.") ; fork() ; return 0 ;}输出如下所示:This is my output.T
2014-11-17 01:51:51
1881
转载 linux读取配置文件(C语言版)
一个通用的linux系统中C语言版读取配置文件的函数。12345678910111213141516171819202122232425262728
2014-07-04 18:05:32
1158
转载 Linux C 创建配置文件小模板
虽然现在大部分时候写系统都是用xml解析配置文件了, 但有时一些小型的东西配置项不多且关系并不复杂的时候, 仅用一两个小函数读取配置文件的方式也不错, 这样的话, 配置文件也可以写得很简单了 第一步, 先写一个最简单版本的, 1.配置项以行为单位, 配置项(key)在前, 值(value)在后, 中间用空格分隔, key和value可以分别用单引号和双引号引起来 2.
2014-07-04 18:01:55
993
转载 用Linux守护进程检测某个程序是否运行(然后重新运行)
环境:主机:Fedora12目标板:SC6410目标板LINUX内核版本:2.6.36实现功能:做的一个嵌入式板子开机会自启动一个程序,但发现它工作数天后会退出。检查内存使用并没有泄漏,于是编写了一个守护进程来不断检查程序是否运行,没运行则运行它,这是一个折衷的办法。说明:需要运行的程序是AlarmInterface,位于目录/rf/下面。我
2014-06-27 17:29:35
2621
转载 Linux下编写守护进程(syslog详解)
Linux下编写守护进程Linux 守护进程 守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux 系统有很多守护进程,大多数服务都是通过守护进程实现的。同时,守护进程
2014-06-27 17:27:38
1629
转载 如何编写linux 守护进程
linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程
2014-06-27 12:04:00
576
转载 extern关键字详解
extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。目录1关键字2编译、链接3函数1关键字编辑在一个源文件里定义了一个数组:char a[6];在另外一个文件里用下
2014-06-19 22:20:48
900
转载 为什么shell的变量定义不能有空格
典型例子:a=dateecho $a 成立a =dateecho $a 不成立 其实原因很简单shell在解释命令时的原则是第一个符号标记只能是程序或者命令,有空格的时候第一个符号标记就是“a”,当然就不成立了而没有空格的时候,第一个标记是“a=date”,shell将解释为变量赋值指令,因此可以通过。这个原
2014-06-19 16:17:11
1591
转载 QT连接各种数据库报错解决
ubuntu下QT连接各种数据库报错解决(QSqlDatabase: * driver not loaded) 1、QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE说明在QT连接mysql数据库时,mysql的数据库驱动没有加载上,实际上就是缺少libqt4
2014-06-19 13:28:20
1962
转载 Shell十三问
我在 CU 的日子并不长,有幸在 shell 版上与大家结缘。除了跟众前辈学习到不少技巧之外,也常看到不少朋友的问题。然而,在众多问题中,我发现许多瓶颈都源于 shell 的基础而已。每次要解说,却总有千言万语不知从何起之感...这次,我不是来回答,而是准备了关于 shell 基础的十三个问题要问大家﹗希望 shell 学习者们能够透过寻找答案的过程,好好的将 shell 基础打扎实一点.
2014-06-05 15:51:41
595
转载 linux 多线程信号总结
linux 多线程信号总结(一)1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。也就是说,信号会随机发个该进程的一个线程。2 signal函数BSD/Linux的实现并不在信号处理函数调用时,恢复信号的处理为默认,而是在信号处理时阻塞此信号,直到信号处理函数返回。
2014-05-16 13:48:29
727
转载 Linux多线程中使用信号-2
Linux 多线程应用中如何编写安全的信号处理函数转自:http://www.ibm.com/developerworks/cn/linux/l-cn-signalsec/index.html?ca=drs-cn-0618周 婷 (zhouting@cn.ibm.com), 软件工程师, IBM 中国软件开发技术实验室刘 坚 (liujsh@cn.i
2014-05-08 16:06:59
614
转载 Linux多线程中使用信号-1
在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!)。然而信号处理函数的实现,有着许多的限制;比如有一些函数不能在信号处理函数中调用;再比如一些函数read、recv等调用时会被异步的信号给中断(inter
2014-05-08 15:45:02
571
转载 可重入和不可重入函数
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果假设有这么个函数void fun(){//...这个函数对FLOAT寄存器进行操作}假如第一次执行,有个对浮点数操作运算的结果临时存在FLOAT寄存
2014-05-03 19:51:09
731
转载 Linux 网络编程之ioctl函数
1.介绍Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解一下ioctl函数的具体实现.2.相关结构体与相关函数#include int ioctl(int d,int request,....);
2014-04-30 13:33:08
840
原创 android开发的XML文件中‘@’‘+’含义(android:id="@+id/my_button")
许多UI开发的同学会对 android:id="@+id/my_button"的含义有所疑问,细心的同学会发现官方SDK是这样解释的,-----------------------------------------------------------------------------------------------------------------------------------
2014-04-13 23:12:16
1260
谭浩强C语言教程Word版.rar
2012-03-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人