March 24th, 2017

系统性能指标的采集方法(Linux篇)

通过程序采集服务器的性能指标,并以此数据为基础构造监控系统,是运维的常见需求。本文阐述各种主要性能指标的具体采集方法和技术。

March 15th, 2017

unix文件描述符

文件描述符是unix系统中最重要的概念之一,绝大部分的系统调用都涉及到文件描述符。文本阐述文件描述符的概念。

January 23rd, 2017

Go编程技巧--Goroutine的优雅控制

Goroutine是Go语言最重要的机制,Goroutine将复杂的需要异步的IO调用抽象成同步调用,符合人类正常的顺序思维,极大的简化了IO编程的难度。如同线程一样,对Goroutine既要掌握基本的用法,更要很好的控制Goroutine的退出机制。本文介绍一种Goroutine的退出思路。

November 11th, 2016

AIX程序打包

为了让程序可以在aix上使用smitty安装,需要采用aix下专门的打包工具。

November 10th, 2016

练上一年再来总结的vim使用技巧

转眼上vim“贼船”有一年多了。从PHPC,都在用。想要真正用vim于日常的编码工作,必然需要一些插件的支持。不过本文并不打算总结插件,笔者认为vim的两个精髓:组合重复跟插件也没有什么关系。

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之类的要难的多,究竟是为什么呢?有人可能会说是手动内存分配的复杂性,字符串处理的不便捷…都没错,笔者认为,总结一句话是标准化和工业化程度决定了使用的难易程度