C 語言的 extern 與 static...

把十年多的 BBS source code porting 到 Ubuntu 上,被迫要用 GCC 4.6 而一路找出來的...

在 BBS 內有這樣的資料結構要處理:

typedef struct p {
    struct p *pointer;
} P;

static P p1 = { &p2 };
static P p2 = { &p1 };

兩個要互指,但在指定 p1 時 p2 還沒有被定義,所以要用 extern 先宣告:

typedef struct p {
    struct p *pointer;
} P;

extern P p2;

static P p1 = { &p2 };
static P p2 = { &p1 };

這個語法在舊版的 GCC 沒問題 (3.4),但在新版的 GCC 4.6 上不接受這個寫法,會抱怨後面的 p2 實際在宣告是 static,與前面的 extern non-static 不符。

後來在 Stack Overflow 上找到「static extern vs extern static」這篇說明,要先定義 static 再定義 extern:

static P p2;
extern P p2;

這樣寫的原因在原文的下方有說明,所以是 C99 定義的關係?

FreeBSD snapshot 版本復出...

很久前 FreeBSD 有提供 weekly build (還是 daily build?) 讓人安裝,以前還蠻喜歡抓這個版本下來裝,因為解開 ports 的東西不會太舊。現在網路夠快,用 Portsnap 拉一下就抓完了...

不過對於希望能用 -STABLE 的人絕對是一個相當棒的服務 (通常發生在 -STABLE 從 -CURRENT 合併新功能進來時... 這時可以直接裝一台機器測試,而不用先裝 -RELEASE 再 re-compile kernel & world 升級):「FreeBSD Development Snapshot Availability」。

目前針對 10-CURRENT 放出 amd64、i386、powerpc、powerpc64 四個平台,9-STABLE 則是 amd64 與 i386,所以總共是六個支線,檔案在官方的 FTP 站上可以取得:「ftp.freebsd.org/pub/FreeBSD/snapshots/」。

關於 ISO/IEC 27001...

昨天 (過十二點了) 跟兔子吃飯提到 ISO/IEC 27001,果然有些數字當場都記錯了...

www.iso27001certificates.com/Register%20Search.htm 這邊有資料可以看每個國家通過的張數,另外在 www.iso27001certificates.com/certification_directory.htm 則可以查到有哪些單位負責認證與稽核。

2012 年八月的現在,台灣通過 461 張 (這幾年竄起的),中國 393 張,美國與加拿大加起來 115 張 (之前看的時候還是兩位數?)...

至於這些數字要怎麼解讀,就是個人的想法了 :p

AWS 的幾個進展:EC2 HPC 與 ISO 27001

其中一個是 AWS EC2HPC (High Performance Computing) 平台上了 2010 年 11 月 Top 500 的 #231:「AWS Compute Cluster #231 on Top 500」,每個 node 只要 $1.60/hour 與 $2.10/hour (GPU 版本)。

另外一個是 AWS 通過 ISO 27001:2005 - Information technology -- Security techniques -- Information security management systems -- Requirements:「AWS Receives ISO 27001 Certification」。

兩件事情都不小,前者會對 Super Computer 帶來一定程度的改變,後者則是給一般人對於 Cloud Computing 的安全印象有所改變 (雖然我覺得 ISO 27001 解決的方向並不太一樣...)。