UNIX 環境高階程式設計Chapter 1 2

2021-07-31 10:18:10 字數 2652 閱讀 6590

第一條規則是:如果沒有出錯,則其值不會被乙個例程清除。

因此,僅當函式的返回值指明出錯時,才檢驗其值。第二條是:任一函式都不會將 e r r n o值設定為0,在< e r r n o . h >中定義的所有常數都不為 0。

c標準定義了兩個函式,它們幫助列印出錯資訊。

#include

c h a r * s t r e r r o r ( i n t  errnum) ;

返回:指向訊息字串的指標

此函式將errnum(它通常就是 e r r n o值) 對映為乙個出錯資訊字串,並且返回此字串的指標。

p e r r o r函式在標準出錯上產生一條出錯訊息 (基於e r r n o的當前值),然後返回。

#include

v o i d

p e r r o r (c o n s t c h a r    *m s g) ;

它首先輸出由m s g指向的字串,然後是乙個冒號,乙個空格,然後是對應於 e r r n o值的出

錯資訊,然後是乙個新行符。

#include "apue.h"

#include int

main(int argc, char *argv)

結果:$ ./a.out

eacces: permission denied

./a.out: no such file or directory

注意,我們將程式名 ( a rg v〔0〕,其值是 a.out) 作為引數傳遞給 p e r r o r。這是乙個標準的

u n i x慣例。使用這種方法,如程式作為管道線的一部分執行,如:

prog1 < inputfile | prog2 | prog3 > outputfile

則我們就能分清三個程式中的哪乙個產生了一條特定的出錯訊息。

口令檔案登入項中的使用者 i d(user id)是個數值,它向系統標識各個不同的使用者。

使用者i d為0的使用者為根 ( r o o t )或超級使用者 ( s u p e r u s e r )。

呼叫g e t u i d和g e t g i d以返回使用者i d和組i d。

對於使用者而言,使用名字比使用數值方便,

所以口令檔案包含了登入名和使用者 i d之間的對映關係,

而組檔案則包含了組名和組 i d之間的對映關係

有兩種鍵盤方式,分別稱為中斷鍵 (interrupt key,通常是 d e l e t e鍵或c t r l - c )和退出鍵 (quit key,通常是 c t r l - \ ),它們被用於中斷當前執行程序。

另一種產生訊號的方法是呼叫名為 k i l l的函式。在乙個程序中呼叫此函式就可向另乙個程序傳送乙個訊號。當然這樣做也有些限制:當向乙個程序傳送訊號時,我們必需是該程序的所有者。

#include "apue.h"

#include /*整體就是比1-5.c更加嚴謹---2017-5-1-15.25xc*/

static void sig_int(int); /*訊號捕捉函式*/

intmain(void)

else if (pid == 0)

/* parent */

if ((pid = waitpid(pid, &status, 0)) < 0)//父親等兒子結束

err_sys("waitpid error");

printf("%% ");

}exit(0);

}/*相比1-5.c新增*/

void

sig_int(int signo)

(1) 日曆時間。該值是自1 97 0年1月1日0 0 : 0 0 : 0 0以來國際標準時間(u t c)所經過的秒數累計值(早期的手冊稱 u t c為格林尼治標準時間)。這些時間值可用於記錄檔案最近一次的修改時間等。

(2) 程序時間。這也被稱為 c p u時間,用以度量程序使用的**處理機資源。程序時間以時鐘滴答計算,多年來,每秒鐘取為 5 0、6 0或1 0 0個滴答。系統基本資料型別 c l o c k _ t儲存這種時間值。

• 時鐘時間。

• 使用者c p u時間。

• 系統c p u時間。

時鐘時間又稱為牆上時鐘時間( wall clock time)。它是程序執行的時間總量,其值與系統中同時執行的程序數有關。在我們報告時鐘時間時,都是在系統中沒有其他活動時進行度量的。

使用者c p u時間是執行使用者指令所用的時間量。系統 c p u時間是為該程序執行核心所經歷的時間。例如,只要乙個程序執行乙個系統服務,例如 r e a d或w r i t e,則在核心內執行該服務所花費的時間就計入該程序的系統 c p u時間。使用者 c p u時間和系統 c p u 時間的和常被稱為c p u時間。

從執行者的角度來看,系統呼叫和庫函式之間有重大區別,但從使用者角度來看,其區別並不非常應用**重要。在本書中系統呼叫和庫函式都以 c函式的形式出現,兩者都對應用程式提供服務,但是,我們應當理解,如果希望的話,我們可以替換庫函式,使用者程序但是通常卻不能替換系統呼叫。

從中可見,兩者職責不同,相互分開,核心中的系統呼叫分配另外一塊空間給程序,而庫函式m a l l o c則管理這一空間。

系統呼叫和庫函式之間的另乙個差別是:系統呼叫通常提供一種最小介面,而庫函式通常提供比較複雜的功能。

unix環境高階程式設計

unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...

unix環境高階程式設計

檔案描述符file descriptor通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或建立乙個新檔案時,它都返回乙個檔案描述符。在讀寫檔案時,可以私用這個檔案描述符。按管理,每當執行乙個新程式時,所有的shell都為其開啟了3個標準檔案描述符 標準輸入,標準...

UNIX環境高階程式設計

本書是被譽為unix程式設計 聖經 的advanced programming in the unix environment一書的更新版。在本書第1版出版後的十幾年中,unix行業已經有了巨大的變化,特別是影響unix程式設計介面的有關標準變化很大。本書在保持了前一版風格的基礎上,根據最新的標準對...