APUE 1 第一章 UNIX基礎知識

2021-07-07 10:04:32 字數 3058 閱讀 8187

2.我儲存到了/root下.解壓縮:tar -xzvf src.tar.gz

3.cd apue.2e進入apue.2e目錄,檢視readme,告訴我們linux系統只要修改make.defines.linux再make

4.vi make.defines.linux 修改wkdir=/root/apue.2e 就是說工作目錄為wkdir=/root/apue.2e

5.修改/root/apue.2e/std/linux.mk把全部的nawk改為awk.因些linux預設沒有nawk

6.make

現在,你可以把它拷貝到你能尋找的地方,在編寫例子的時候,你就可以

4、拷貝apue2e_src/apue.2e/include/apue.h和apue2e_src/apue.2e/lib/libapue.a

到你的源**目錄。

5、使用gcc -o hello hello.c libapue.a來編譯你的源**

方法二:

apue程式設計的例子都有關include"apue.h"的**,其實apue.h並不是系統自帶的,它是作者編寫的標頭檔案,源**在附錄b中.因此乙個方法是.把剛才生成的 /root/apue.2e/include/apue.h直接複製到/usr/include下.

還有像err_sys的函式也在附錄b中.同樣的方法是在/usr/include新建乙個 my_err.h的檔案,把figure b.3. error functionsthat output to standard error內容複製進去.這樣按例子程式設計就只需要在行首新增:#include "my_err.h"就可以了..

引用:每當執行乙個新程式時,所有的s h e l l都為其開啟三個檔案描述符:標準輸入、標

準輸出以及標準出錯。

使用標準i / o可無需擔心如何選取最佳的快取長度。另乙個使用標準i / o函式的優點與處理輸入行有關(常常發生在u n i x的應用中)。例如,f g e t s函式讀一完整的行,而另一方面, r e a d函式讀指定位元組數。

/**

* 功能:標準輸入複製到標準輸出,也就能複製任一unix普通檔案。

*/#include #include "apue.h"

#include "error.c"

int main(void)

//if

}//while

if(ferror(stdin)) //標準輸入

//if

exit(0);

}

程式(p r o g r a m)是存放在磁碟檔案中的可執行檔案。使用6個e x e c函式中的乙個由核心將

程式讀入儲存器,並使其執行。

程式的執行例項被稱為程序( p r o c e s s)。本書的每一頁幾乎都會使用這一術語。某些操作

系統用任務表示正被執行的程式。

/**

* 功能:列印出程序id

*/#include "apue.h"

#include "error.c"

int main(void)

有三個用於程序控制的主要函式: f o r k、e x e c和w a i t p i d(e x e c函式有六種變體,但經常把它們統稱為e x e c函式)。

並沒有**,這個後面會講解

通常,乙個程序只有乙個控制線程——某一時刻執行的一組機器指令。

多個控制線程也可以充分利用多處理器系統的並行能力。

與程序相同,執行緒也用id標識。但是,執行緒id只在它所屬的程序內起作用。

當u n i x函式出錯時,往常返回乙個負值,而且整型變數e r r n o通常設定為具有特定資訊的一

個值。對於e r r n o應當知道兩條規則。

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

第二條是:任一函式都不會將e r r n o值設定為0,在< e r r n o . h >中定義的所有常數都不為0。

程序如何處理訊號有三種選擇:

(2) 按系統預設方式處理。對於0除,系統預設方式是終止該程序。

(3) 提供乙個函式,訊號發生時則呼叫該函式。使用這種方式,我們將能知道什麼時候產生了訊號,並按所希望的方式處理它。

/**

* 功能:處理程序訊號

*/#include "apue.h"

#include "error.c"

#include /**

* 訊號捕獲函式宣告

*/static void sig_int(int);

int main(void)

//if

printf("%% ");

while(fgets(buf, maxline, stdin) != null)

//if

if((pid = fork()) < 0)

//if

else if(pid == 0)

//else if

if((pid = waitpid(pid, &status, 0)) < 0)

//if

printf("%% ");

}//while

exit(0);

}void sig_int(int signo)

(1) 日曆時間。該值是自1 9 7 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儲存這種時間值。另外, p o s i x定義常數c l k t c k,用其說明每秒滴答數。

從執行者的角度來看,系統呼叫和庫函式之間有重大區別,但從使用者角度來看,其區別並不非常重要。

APUE筆記 第一章 UNIX基礎知識

檔案描述符是乙個小的非負整數,核心用以標識乙個待定程序正在存訪的檔案。當核心開啟乙個現存盤案或建立乙個新檔案時,它就返回乙個檔案描述符。當讀 寫檔案時,就可以使用它。函式open read write lseek以及close提供了不用快取的i o。這些函式都用檔案描述符進行工作。標準i o函式提供...

UNIX基礎知識 《APUE》第一章筆記

核心 可將作業系統定義為一種軟體,它控制計算機硬體資源,提供程式執行環境。一般而言,我們稱這種軟體為核心 kernel 它相對較小,位於環境的中心。unix系統呼叫 核心,系統呼叫 shell,庫函式 應用軟體 最下層是核心,最上層是應用軟體 shell shell是一種特殊的應用程式,它為執行其他...

第一章 Unix基礎

1.5輸入輸出 1檔案描述符 通常是乙個非負整數。核心用它標示乙個特定程序正在訪問的檔案。當核心開啟或建立乙個新檔案時,它返回乙個檔案描述符,在讀寫檔案時,就可使用它。2標準輸入 標準輸出 標準出錯 三個檔案描述符 當執行乙個新程式時,shell為其開啟三個檔案描述符 標準輸入輸出出錯。如果沒什麼特...