C 函数
C 语言提供了子程序,它可以将我们的程序分割成不同的部分。为了编写函数,我们至少给出函数的定义。通常,我们还需要给出函数的声明;但是,函数的声明不是必须的,如果不给出函数声明,那么编译器将给出一个匹配该函数的隐式声明,而且我们将得到编译时警告。
每个程序都至少需要一个名为 main
的函数,这是程序执行的入口函数。本文主要分为以下几部分:
- 函数声明
- 函数定义
- 函数调用
- 函数参数
- 变长参数列表
- 函数指针调用
main
函数- 递归函数
- 静态函数
- 嵌套函数
C 语言提供了子程序,它可以将我们的程序分割成不同的部分。为了编写函数,我们至少给出函数的定义。通常,我们还需要给出函数的声明;但是,函数的声明不是必须的,如果不给出函数声明,那么编译器将给出一个匹配该函数的隐式声明,而且我们将得到编译时警告。
每个程序都至少需要一个名为 main
的函数,这是程序执行的入口函数。本文主要分为以下几部分:
main
函数今天在 Solaris 上遇到一个问题,我需要在非超级用户下运行某个服务。默认情况下,通过 SMF 管理的都是在 root 用户下运行的,但是我们可以通过修改配置文件来使其运行到特定用户下。
C 语言提供了语句用以控制程序的执行流程。您可以编写不执行任何操作的语句,当然也可以编写执行毫不相关的语句(没有任何意义)。本文主要介绍 C 语言所提供的一些语句类型,它们分别是:
;
这样的语句;a += 10
;ARP (Address Resolution Protoco),中文地址解析协议,用来将网络层的 IP 地址转换为数据链路层的物理地址,该协议属于 TCP/IP 协议簇。当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48 bit 的以太网地址来确定目的接口的。设备驱动程序从不检查 IP 数据报中的目的 IP 地址。而地址解析为这两种不同的地址形式提供映射: 32 bit 的 IP 地址和数据链路层使用的任何类型的地址。RFC 826 给出了 ARP 协议的规范。ARP 协议为 IP 地址到对应的硬件物理地址提供了动态映射,通常情况下用户或系统管理员不用担心。
最近在客户那边了解到一个需求,想要监控 PostgreSQL 数据库每天的大小变化。其实这个功能挺简单的,PostgreSQL 可以通过函数 pg_database_size()
来获取数据库的大小,而客户需要做的就是每天去执行一下,并与上次的结果进行比较就可以得到了。当然,手动执行的效率不是很高,因此,我利用业余时间整理了一下,将这个需求通过 PostgreSQL 插件的形式提供出来。本文主要介绍一下如何实现这个功能。
PostgreSQL 在插入数据的时候除了维护用户的属性列外,还有几个隐藏的系统属性列,如 ctid
、xmin
和 xmax
等。如下图所示:
从上图中我们可以看到,系统属性列其编号(即 attnum
)为负数,而用户自定义的属性列其编号则为正数(由 1 开始)。本文将介绍如何在 PostgreSQL 中添加自定义系统属性。
有时,我们在克隆代码或者拉取代码时想要跳过 SSL 验证(至于为什么有这么奇葩的需求就不多说了,自行体会),git 提供了多种方式可供用户选择。
首先,我们看来看看克隆代码时如何跳过 SSL 验证。如下,我们可以使用 GIT_NO_SSL_VERIFY
环境变量来设置是否采用 SSL 验证。
1 | $ GIT_SSL_NO_VERIFY=true git clone https://github.com/xxx/xxx |
如果是仓库已经采用 SSL 验证克隆下来,但是在随后的拉取过程中想要取消 SSL 验证,我们可以通过修改配置来完成,例如:
1 | $ git config http.sslVerify false |
如果您想后续的仓库都跳过 SSL 验证,可以设置全局的 http.sslVerify
,如下所示:
1 | $ git config --global http.sslVerify false |
本文将介绍如何在 PostgreSQL 中创建一个新的系统表。PostgreSQL 将系统表都存放在 src/include/catalog
目录下,如下图所示:
从目录结构来看,我们大概可以猜测到 PostgreSQL 将系统表的定义和数据分别存放在两个不同的文件中,例如,系统表 pg_class
,其表结构定义在 pg_class.h
文件中,而数据则在 pg_class.dat
文件中。此外每个表都在数据库内部都有一个唯一的 OID 来作为标识。PostgreSQL 提供了脚本来检查未使用的 OID 以及是否包含重复的 OID,它们分别为 unused_oids
和 duplicate_oids
。所有的系统表都将由 src/backend/catalog/Catalog.pm
进行处理,该文件负责将系统表文件转换为 Perl 数据结构。
本文主要介绍 PostgreSQL 数据库中的临时表 (Temporary Table)。临时表将在会话结束或者当前事务结束时被删除。PostgreSQL 支持临时表和永久存储表 (Permanent Table) 具有相同的名称,如果出现这种情况,那么只有在临时表被删除之后才能看到永久表或者你可以指定 schema 来明确需要查询的是永久表。此外,在临时表上建立的索引同样也是临时的。