從開始看APUE已經(jīng)有快一個星期了,由于正好趕上這幾天清明節(jié)放假,難得有了三天空閑假期可以不受打擾的學(xué)習(xí)APUE,現(xiàn)在已經(jīng)看完前六章了,里面的大部分例程也都親自編寫,調(diào)試過了。但總覺得這樣學(xué)過就忘,因此決定把這個學(xué)習(xí)過程記錄下來,學(xué)到后面章節(jié)的時候回顧前面的章節(jié),做到溫故知新。也可以將自己在學(xué)習(xí)過程中遇到的問題記錄下來。
本書對UNIX系統(tǒng)的提供的接口的方方面面進(jìn)行了講解,中間還穿插介紹了很多UNIX或類UNIX系統(tǒng)的相關(guān)知識,即使現(xiàn)在我只是看過了前六章,也感覺學(xué)到了不少知識,解決了我以前對linux系統(tǒng)的不少疑惑。每天都能夠?qū)W習(xí)到自己不知道的東西,感覺很好。
本書提供了全書的所有例程,可以在該網(wǎng)站獲?。篽ttp://www.apuebook.com/code3e.html,我用的是第三版,大家可以根據(jù)自己的情況選擇下載。但是在第一個例程就遇到了問題,寫完程序,編譯,報錯:$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
(由于已解決了該問題,也未記錄,因此該錯誤我是引用自這篇文章,也是根據(jù)該同學(xué)的方法設(shè)置好了整個需要的配置環(huán)境;
http://blog.csdn.net/blitzskies/article/details/42171089)
err_quit與err_sys函數(shù)都是在apue.h中定義的,雖然在程序中引用了,但gcc編譯時需要自己指定引用的外部庫,PRintf這些是系統(tǒng)的庫,已經(jīng)在環(huán)境變量中指定了,不需要我們指定。但我們需要的這個庫在哪呢,現(xiàn)在就要回到我們下載的那個apue文件包了,解壓,文件目錄下有個README,里面清楚的說了,make一下(make命令的作用是保持一組程序最新,用于在處理大型程序修改后,自動處理由于模塊間復(fù)雜的依賴關(guān)系而需要重新編譯的那些模塊的工作)。然后我們會在lib文件夾中發(fā)現(xiàn)libapue.a文件(.a文件是LINUX系統(tǒng)中的靜態(tài)鏈接庫文件),這就是我們需要的庫文件。然后我們要把它引入我們的LIBRARY_PATH環(huán)境變量中,還有就是我們在每個例程程序中都會引用的apue.h,它在include文件夾中,我們要把它引入C_INCLUDE_PATH環(huán)境變量中,設(shè)置這兩個變量的目的是讓程序可以找到庫文件與頭文件,輸入命令:
每次編譯程序時都加入-lapue,就沒問題了
運(yùn)行結(jié)果如下:
第一章主要是UNIX導(dǎo)論,所有的部分在后面章節(jié)都會詳細(xì)講解。
第二章主要是UNIX標(biāo)準(zhǔn)的介紹,不同系統(tǒng)上的實現(xiàn)上的一些區(qū)別。有幾個函數(shù),用來告訴你特定系統(tǒng)上實際支持的限制:
#icnlude <unistd.h>
long sysconf(int name);
long pathconf(const char *pathname,int name);
log fpathconf(int fd,int name);
sysconf函數(shù)中的參數(shù)name用于標(biāo)識系統(tǒng)限制,若系統(tǒng)支持,則返回相應(yīng)值,出錯返回-1。
pathconf與fpathconf用于獲取name標(biāo)識對pathname所指文件的限制與否,若系統(tǒng)支持,則返回相應(yīng)值,出錯返回-1。
當(dāng)有系統(tǒng)函數(shù)不了解是可以用man命令查看。
To be continued...
新聞熱點(diǎn)
疑難解答