September 24th, 2016

实践:GNU构建系统

在上一篇概念:GNU构建系统和Autotool,我对GNU构建系统从用户视角和开发者视角分别进行了阐述。本篇从我的实践总结的角度,并阐述如何从头开始规划一个基于GNU构建系统的项目。事实上,随着开发者对跨平台认知的深入和完善,才能逐渐掌握GNU构建。注意:本文的例子不依赖于任何IDE和编辑器。这样读者可以从根本上认识到每个文件的作用。

September 16th, 2016

概念:GNU构建系统和Autotool

经常使用Linux的开发人员或者运维人员,可能对configure->make->make install相当熟悉。事实上,这叫GNU构建系统,利用脚本和make程序在特定平台上构建软件。这种方式成为一种习惯,被广泛使用。本文从用户视角和开发者视角详细说明,这种构建方式的细节,以及开发者如何利用autoconfautomake等工具(autotools)创建兼容GNU构建系统的项目。

September 15th, 2016

C静态库连接的顺序问题

C语言的静态连接,简单的说就是将编译得到的目标文件.o(.obj),打包在一起,并修改目标文件中函数调用地址偏移量的过程。当在大一点的项目中,可能会遇到连接时,由于静态库在链接器命令行中出现顺序的问题,造成undefined reference错误。本文深入探讨一下这个问题,以及如何解决。

September 1st, 2016

ANSI C标准库

将输入输出抽象为流,预定义标准输入输出和标准错误流:stdin stdout stderrf开头的函数的操作对象是一个流对象FILEs开头的函数操作的对象通常是char *。 - 文件流操作相关:fopen fclose … 主要用于得到和关闭FILE - 格式化输出:fprintf sprintf…特别的printf其实就是fprintf(stdout,...) - 格式化输入:fscanf sscanf…特别的scanf其实就是fscanf(stdin,...) - 字符的输入输出:fgetc fgets fputc fputs…基于字符和行的输入和输出 - 直接输入输出:fread fwrite 基于裸数据的流读写 - 文件的定位操作:fseek… - 错误相关:feof ferror

August 17th, 2016

怎样让C不这么难

笔者最近在开始一些C的应用程序开发,主要在linux下进行,目标是跨平台的应用程序。虽然是基于某开源程序进行开发,看了不少源码,也动手扩展和修改了开源程序,感触颇多。C其实是语法最为简单的编程语言之一。但是在实际的开发中,尤其是用C来开发一些系统应用程序,会感觉到比Java之类的要难的多,究竟是为什么呢?有人可能会说是手动内存分配的复杂性,字符串处理的不便捷…都没错,笔者认为,总结一句话是标准化和工业化程度决定了使用的难易程度

July 27th, 2016

logstash的lumberjack协议解析

最近在实现一个agent采集服务器日志,设计agent需要能够将数据发送给logstash。当然logstash支持很多输入协议,其中,logstash技术栈(包括ElasticSearch)内有一种叫做lumberjack的协议,可能是专门为传输日志数据设计的。不过网上对于lumberjack协议没有公开的资料,而且实现上,只有javarubygolang版。笔者通过参考golang版(elastic/go-lumber)和java版(logstash-forwarder-java),用C实现了agentlumberjack的支持。本文总结一下lumberjack协议的协议报文格式。

July 18th, 2016

AIX配置Volumn

我们知道,现在操作系统都具有默认的卷管理系统来管理磁盘。详见存储技术之卷管理和文件系统。总体来说,从下向上分为物理磁盘(PV)、逻辑卷组(VG)、逻辑卷(LV),用户可以直接mount的是逻辑卷。本文记录一些AIX下的卷管理和配置方法。

July 17th, 2016

Linux下的静态库、动态库和动态加载库

库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从Linux的角度浅谈Linux下的静态库、动态库和动态加载库。

May 16th, 2016

Golang服务器的网络层实现

由于最近有接触到一些长连接的服务器实现,对网络模型有所学习。对基于C/C++的网络模型实现和基于GoLang的实现对比下来,发现Golang的网络模型编程难度大大降低,这得益于Golang的goroutine,可以在编程的时候肆无忌惮的创建并发”线程”,当服务器能为每一个客户端都开启若干”线程”的话,编程变的简单很多。