閒談 ICOS 2002

我只參加了第一天及第二天的技術議程,因為我對 Li18nux 及第三天的座談形式較不感興趣。

首先呢,第一天的頒獎典禮就帶給我一個大驚喜,得獎作品土撥村BBS 的作者,竟採用了我一、兩年前改進的Firebird BBS source codes (The TIP Project) 用來處理 I/O 動作,真的很爽 (經濟學的術語叫「效用非常大」) 。

Linux System Backup and Clone

主要用於系統持續服務的狀態下 (不關機狀態) ,進行系統備份工作,將運作中系統的內容,複製到遠端系統上儲存。都是可利用此備份技巧,進行系統的複製。重點在於不中斷系統服務的狀態 (不需要關機與重開機) 下完成此工作。

XHTML 1.0 指引重點提要

本文重點提示了 XHTML 的使用指引,讓網頁設計者以及使用 HTML 編寫文件的作者 (如筆者本人) 更快了解 XHTML 以及 HTML 的差異,並將之實際運用在網頁編寫中。

首次發佈於 2001/3/28 ,在我的個人網頁中。這次發佈到部落格中,除了重新排版外,也修增了一些內容。現在 XHTML 2.0 的規格都已經在製訂中了,真是惚如昨日。

Apache SSI 摘要

SSI是Server-Side Inclues的縮寫。 其意為,提供一個可含括(Includes)在html文件的控制指令,並能在伺服端(Server-Side)加以解析的功能。在閱讀本文前,我假設各位跟我一樣,了解SSI的用途,曾閱讀過Apache所提供的SSI文件(Module mod_include),並在使用時,和我碰到一樣的困擾。

在 C 程式中使用 MD5 library 及其應用

簡單地說, MD5 是一種單向雜湊(hashing)演算法,可將你所給予的任何長度字串,藉由 MD5 雜湊演算得出一個長度為 128 位元 (術語稱之為 "digest code")的計算結果。後述以鍵值稱呼 digest code。MD5 演算法,是由 RSA Data Security, Inc 公司所提出的。演算原理參閱 MD5 - Wikipedia

Make 工具使用簡介

Make 是一個歷史悠久且普遍的專案管理工具,從 DOS/Windows 到 Unix 都看得到其蹤影。儘管各系統上的 Make 工具不儘相同,但其描述方式,則大致相通。本文若未指明的內容,皆適用在 GNU make 、 BSD pmake 與 Microsoft nmake 。

此文是我以過去所整理的 Microsoft nmake 使用方法的文章為基礎所重編,後來的修改部份,主要在納入關於 GNU make 的內容。

Unix/Linux 系統程式 - deamon 程式的初始動作

由於 deamon 有下列的特殊行為,所以最好進行初始動作,才不會產生問題。

  • 通常在系統啟動時即開始活動,而且不會結束。
  • 通常是以 root 的身份啟動的。
  • 通常在背景執行。
  • 通常不受終端機控制,也不對終端機做輸出入。

Unix/Linux 系統程式 - 防止 zombie 程序產生

前言

在 Unix 系統中,程序間有父子關係存在,當程序經由系統呼叫 fork() 產生另一個程序時,這兩個程序間就存在了父子關係。

當子程序結束時,系統會將子程序的結束狀態保存起來,接著發出訊號 SIGCHLD 通知父程序來取子程序的結束狀態碼,通常是透過系統呼叫 wait() 取得。如果父程序比子程序早結束的話,則子程序將成為孤兒,那麼系統會將此孤兒交給程序 init (unix 系統第一個執行的程序,一定叫 init ,因此它的 pid 為 0) ,由 init 程序取得子程序的結束狀態碼。

不論是由父程序還是 init 程序取得,當子程序的結束狀態碼被取出後,系統就會將子程序的狀態資訊從處理程序表中移除。到此,一個程序才算是整個結束掉。

如果父程序仍然存在,但是卻忘了處理子程序結束的事情,那麼系統會將此子程序的結束狀態碼一直保存在處理程序表中,直到父程序處理為止。在父程序處理之前,就會形成一個 zombie 程序。已經完全沒有活動,所使用的資源也都被系統回收了,但是仍然佔了處理程序表的一筆記錄。

如何以 semaphore 進行資源的共用互斥鎖定

在 Unix 系統中,資源的共用機制,通常以檔案鎖最為常見,也最為容易使用,只要使用 flock() 即可對檔案進行 LOCK_SH (共享鎖定)、 LOCK_EX (互斥鎖定)。但是其他的資源就沒這麼方便,例如共享記憶體完全沒有提供鎖定功能,此時就必須借助其他的行程間通訊機制進行協調,例如「號誌」(semaphore)。

本文即在說明,如何以號誌實作一個如 flock() 具有 LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB 四種參數的「資源共用互斥鎖定函數」。