APUE 第二章UNIX標準及實現

2021-08-11 07:39:27 字數 1966 閱讀 1999

這一章的閱讀相對枯燥,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...