這一章的閱讀相對枯燥,20世紀80年代unix版本種類劇增以及他們之間的差別的擴大,導致很多使用者呼籲對其進行標準化。
unix標準化介紹了iso c ieee posix single unix specification fips,這部分內容不詳細總結。
unix系統實現介紹了 svr4 4.4bsd free bsd linux mac osx solaris.
unix系統中的「限制」,主要包括兩類限制:
編譯時限制,例如,短整型的最大值是多少。編譯時限制可在標頭檔案中定義,程式在編譯時可包含這些標頭檔案。
執行時限制,例如,檔名有多少個字元。執行時限制要求程序呼叫乙個函式獲得限制值。
但以上這些限制都不是絕對,某些限制在乙個給定的實現中可能是固定的(可採用靜態地在乙個標頭檔案中定義),而在另乙個實現中可能是變動的(需要有乙個執行時函式呼叫)。為了解決這類問題,作業系統提供了以下三種限制:
編譯時限制(標頭檔案)。
與檔案或目錄無關的執行時限制(sysconf函式)。
與檔案或目錄有關的執行時限制(pathconf和fpathconf函式)。
執行時限制可呼叫如下三個函式之一獲得。
#include
long sysconf(int name);
long pathconf(const
char *pathname, int name);
long fpathname(int fd, int name);
後兩個函式的差別是:乙個用路徑名作為引數,乙個則取檔案描述符作為引數。
這裡要著重談一下這三個函式的返回值:
如果name引數不正確,那麼這三個函式都返回-1,並將errno設為einval。
如果某個name返回的值不確定,那麼同樣返回-1,但此時不改變errno的值,所以對於這三個函式的利用,首先需要設定errno為0,在返回-1的情況下,同時需要檢查errno的值,若此時errno仍然為0,那麼說明這個值在作業系統中沒有定義。如果errno值不為0,那麼呼叫函式時發生了錯誤。
若返回值》=0,那麼說明程式正常返回。
由於本章中用到awk,所以要了解必要的awk知識:
執行awk的方法如下:
語法形式:awk -f awk指令碼檔名 被處理檔名
./makeconf.awk sysconf.sym sysopt.sym
由於在makeconf.awk中getline(sysconf.sym) getline(pathconf.sym),所以可以省略被處理檔名。
./makeconf.awk即可生成我們所需要的c語言**。
#include "apue.h"
#include
#include
static
void pr_sysconf(char *, int);
static
void pr_pathconf(char *, char *, int);
intmain(int argc, char *argv)
static
void
pr_sysconf(char *mesg, int name)
else
} else
}static
void
pr_pathconf(char *mesg, char *path, int name)
else
} else
}
功能測試巨集
如果在編譯乙個程式時希望他至於posix的定義相關,而不與任何實現定義的常量衝突,那麼就需要常量_posix_c_source。一旦定義_posix_c_source,所有posix.1標頭檔案都使用此常量來排除任何實現轉悠的定義。
關於apue第二章,我個人認為沒有《linux/unix系統程式設計手冊》中講解的清楚,可以參考我的博文tlpi-chapter 11系統限制和選項
APUE讀書筆記 第二章 unix標準及實現
程式設計師的自我修養 這本書的讀書筆記就先告一段落了,最後一章的執行時庫實現也沒有實現,有機會再補上吧。今天又回到apue,第一章也不給大家分享什麼了,這本書的讀書筆記從第二章開始。好了開始今天的主題,第二章2.4小節之前關於unix標準與實現的討論在此也就不詳細分析了,從2.5小節開始。2.5小節...
UNIX環境高階程式設計 第二章
這一節介紹了三個重要的標準 由於c語言在unix系統中的地位不言而喻,c語言的標準化也是unix標準化的重要組成部分。iso c標準當中包括了 時間線 1989 發布 1999 更新 2001 2004 2007 勘誤 2011 更新 posix portable operating system ...
MySQL第二章總結 Mysql第二章 儲存引擎
1 本章目標 儲存引擎 資料型別 重點 2 儲存引擎 在關係型資料庫中,資料儲存在表中,表由行和列組成。開發中,可能需要各種不同的表,有的表簡單,有的表複雜,有的表讀取快,有的讀取資料慢,有的表更新快等。根據對資料的不同的處理需求,使用不同的儲存引擎,可以將mysql資料庫的效能發揮到最大。查詢my...