APUE學習筆記-記錄一,APUE學習筆記-記錄
從開始看APUE已經有快一個星期了,由於正好趕上這幾天清明節放假,難得有了三天空閑假期可以不受打擾的學習APUE,現在已經看完前六章了,裡面的大部分常式也都親自編寫,調試過了。但總覺得這樣學過就忘,因此決定把這個學習過程記錄下來,學到後面章節的時候回顧前面的章節,做到溫故知新。也可以將自己在學習過程中遇到的問題記錄下來。
本書對UNIX系統的提供的介面的方方面面進行了講解,中間還穿插介紹了很多UNIX或類UNIX系統的相關知識,即使現在我只是看過了前六章,也感覺學到了不少知識,解決了我以前對LINUX系統的不少疑惑。每天都能夠學習到自己不知道的東西,感覺很好。
本書提供了全書的所有常式,可以在該網站擷取:http://www.apuebook.com/code3e.html,我用的是第三版,大家可以根據自己的情況選擇下載。但是在第一個常式就遇到了問題,寫完程式,編譯,報錯:$gcc c1_3.c
/tmp/cchudidN.o: In function `main':
1_3.c:(.text+0x20): undefined reference to `err_quit'
1_3.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld returned 1 exit status
(由於已解決了該問題,也未記錄,因此該錯誤我是引用自這篇文章,也是根據該同學的方法設定好了整個需要的配置環境;
http://blog.csdn.net/blitzskies/article/details/42171089)
err_quit與err_sys函數都是在apue.h中定義的,雖然在程式中引用了,但gcc編譯時間需要自己指定引用的外部庫,printf這些是系統的庫,已經在環境變數中指定了,不需要我們指定。但我們需要的這個庫在哪呢,現在就要回到我們下載的那個apue檔案包了,解壓,檔案目錄下有個README,裡面清楚的說了,make一下(make命令的作用是保持一組程式最新,用於在處理大型程式修改後,自動處理由於模組間複雜的依賴關係而需要重新編譯的那些模組的工作)。然後我們會在lib檔案夾中發現libapue.a檔案(.a檔案是LINUX系統中的靜態連結庫檔案),這就是我們需要的庫檔案。然後我們要把它引入我們的LIBRARY_PATH環境變數中,還有就是我們在每個常式程式中都會引用的apue.h,它在include檔案夾中,我們要把它引入C_INCLUDE_PATH環境變數中,設定這兩個變數的目的是讓程式可以找到庫檔案與標頭檔,輸入命令:
每次編譯器時都加入-lapue,就沒問題了
運行結果如下:
第一章主要是UNIX導論,所有的部分在後面章節都會詳細講解。
第二章主要是UNIX標準的介紹,不同系統上的實現上的一些區別。有幾個函數,用來告訴你特定系統上實際支援的限制:
#icnlude <unistd.h>
long sysconf(int name);
long pathconf(const char *pathname,int name);
log fpathconf(int fd,int name);
sysconf函數中的參數name用於標識系統限制,若系統支援,則返回相應值,出錯返回-1。
pathconf與fpathconf用於擷取name標識對pathname所指檔案的限制與否,若系統支援,則返回相應值,出錯返回-1。
當有系統函數不瞭解是可以用man命令查看。
就這樣。。。