從開始看APUE已經有快一個星期了,由于正好趕上這幾天清明節放假,難得有了三天空閑假期可以不受打擾的學習APUE,現在已經看完前六章了,里面的大部分例程也都親自編寫,調試過了。但總覺得這樣學過就忘,因此決定把這個學習過程記錄下來,學到后面章節的時候回顧前面的章節,做到溫故知新。也可以將自己在學習過程中遇到的問題記錄下來。
本書對UNIX系統的提供的接口的方方面面進行了講解,中間還穿插介紹了很多UNIX或類UNIX系統的相關知識,即使現在我只是看過了前六章,也感覺學到了不少知識,解決了我以前對linux系統的不少疑惑。每天都能夠學習到自己不知道的東西,感覺很好。
本書提供了全書的所有例程,可以在該網站獲?。篽ttp://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
?。ㄓ捎谝呀鉀Q了該問題,也未記錄,因此該錯誤我是引用自這篇文章,也是根據該同學的方法設置好了整個需要的配置環境;
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命令查看。
To be continued...
新聞熱點
疑難解答