灌河赏鲸

到过苏北响水的人都知道那里有条美丽的河,名叫灌河。灌河像一条欢腾的银色巨龙,奔驰在广阔坦荡的苏北平原上,它流经连云港、淮安、盐城三市,直泻浩瀚无垠的黄海。

灌河又是江苏省唯一的在干流上尚未建闸的天然入海潮汐河道,全长74.5公里,在响水境内流程近40公里。这里河宽水深,四季无冻,终年可以通航,是十分难得的“黄金水道”,人们称之为“苏北的黄浦江”。滔滔灌河其水运动功能早已引起世人瞩目,其景色更是名闻远近。然而,在灌河诸景中,最为罕见神奇的还要属“灌河赏鲸”呢!
Continue reading 灌河赏鲸

安全增强 Linux(SELinux)剖析

Linux® 一直被认为是最安全的操作系统之一,但是通过引入安全增强 Linux(Security-Enhanced Linux,SELinux),National Security Agency (NSA) 将 Linux 的安全性提升到了新的高度。SELinux 通过对内核和用户空间进行修改,对现有的 GNU/Linux 操作系统进行了扩展,从而使其变得坚不可摧。如果您现在正在使用 2.6 版的内核,就会惊奇地发现您已经在使用 SELinux 了!本文将探究 SELinux 背后的思想及其实现方法。

简介

公共网络(比如 Internet)充满着危险。只要将电脑连接到 Internet(即使只连接很短的时间),您就会感受到这一点。攻击者可以利用不安全性来获得对一个系统的访问,获得对信息的未授权访问,或者对一台计算机进行改造,以利用它发送垃圾邮件或攻击其他高端系统(使用 SYN 泛洪攻击,一种分布式拒绝服务攻击)。
Continue reading 安全增强 Linux(SELinux)剖析

Linux 可加载内核模块剖析

Linux® 可加载内核模块(从内核的 1.2 版本开始引入)是 Linux 内核的最重要创新之一。它们提供了可伸缩的、动态的内核。探索隐藏在可加载模块后面的原理,并学习这些独立的对象如何动态地转换成 Linux 内核的一部分。

Linux 就是通常所说的单内核(monolithic kernel),即操作系统的大部分功能都被称为内核,并在特权模式下运行。它与微型内核 不同,后者只把基本的功能(进程间通信 [IPC]、调度、基本的输入/输出 [I/O] 和内存管理)当作内核运行,而把其他功能(驱动程序、网络堆栈和文件系统)排除在特权空间之外。因此,您可能认为 Linux 是一个完全静态的内核,但事实恰恰相反。通过 Linux 内核模块(LKM)可以在运行时动态地更改 Linux。
Continue reading Linux 可加载内核模块剖析

Linux 动态库剖析

动态链接的共享库是 GNU/Linux® 的一个重要方面。该种库允许可执行文件在运行时动态访问外部函数,从而(通过在需要时才会引入函数的方式)减少它们对内存的总体占用。本文研究了创建和使用静态库的过程,详细描述了开发它们的各种工具,并揭秘了这些库的工作方式。

库用于将相似函数打包在一个单元中。然后这些单元就可为其他开发人员所共享,并因此有了模块化编程这种说法 — 即,从模块中构建程序。Linux 支持两种类型的库,每一种库都有各自的优缺点。静态库包含在编译时静态绑定到一个程序的函数。动态库则不同,它是在加载应用程序时被加载的,而且它与应用程序是在运行时绑定的。图 1 展示了 Linux 中的库的层次结构。
Continue reading Linux 动态库剖析

编写可移植C/C++程序的要点

昨天看了05年的《程序员(精华本)》,里面有篇关于编写可移植的C++程序的文章,引起了我一丝兴趣,大致读了一下,有点启发。不过感觉作者是位学院派的人士,没有大型项目的移植经验,把移植想得太简单了,以为一个Adapter模式就搞定了所有的东西,太理想化了。

以前做过两年C++程序移植工作,从Win32平台移植到Linux平台。大约有上百万行C/C++代码,历时一年多。在开发Win32版本时,已经强调了程序的可植性,无奈Win32团队里对Linux精通的人比较少,很多问题没有想到,直到后来移植工作开始时,才发现移植并非像想的那样简单。
Continue reading 编写可移植C/C++程序的要点

Idle 函数的三大用途

我们知道glib提供了一个名为g_idle_add的函数,这个函数的功能很容易理解:增加一个空闲任务,让应用程序在空闲时执行指定的函数。这种机制非常有用,如果没有这种机制,很多事情将非常麻烦。它的功能虽然简单,但并不是所有人都知道如何充分发挥它的潜力,这里说说它的几个主要用途吧。
Continue reading Idle 函数的三大用途

Open Sound System (OSS) 研究笔记

我们知道,在Win32下,用waveOut系列函数播放声音,用waveIn系列函数录制声音。这套函数设计简单易用,如果使用DirectX可能还会有更好用的接口。而在linux下,这个问题要麻烦不少,在很长一段时间里,我甚至不知道linux下是如何播放声音的。这几天在研究ALSA,我知道ALSA是OSS的替代品,而且兼容OSS。为了了解ALSA的优势所在,我决定先研究OSS。本文记录了一些在研究过程中所记的笔记。
Continue reading Open Sound System (OSS) 研究笔记