2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩63頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  蚃襖聿莇蕿羃膂薂袈羂芄蒞螄羈蒆薀螀羀膆蒃蚆罿羋蠆薂罿莁蒂袀羈肀蚇螆羇膃蒀螞肆芅蚅薈肅莇蒈袇肄肇芁袃肅艿薆蝿肅莂荿蚅肂肁薅薁肁膃莈衿肀芆薃螅腿莈莆蟻膈肈薁薇膇膀莄羆膇莂蝕袂膆蒅蒂螈膅膄蚈蚄螁芇蒁薀螁荿蚆衿袀聿葿螅衿膁蚄蝕袈莃蕆蚆袇蒆莀羅袆膅薆袁裊芇莈螇裊莀薄蚃襖聿莇蕿羃膂薂袈羂芄蒞螄羈蒆薀螀羀膆蒃蚆罿羋蠆薂罿莁蒂袀羈肀蚇螆羇膃蒀螞肆芅蚅薈肅莇蒈袇肄肇芁袃肅艿薆蝿肅莂荿蚅肂肁薅薁肁膃莈衿肀芆薃螅腿莈莆蟻膈肈薁薇膇膀莄羆

2、膇莂蝕袂膆蒅蒂螈膅膄蚈蚄螁芇蒁薀螁荿蚆衿袀聿葿螅衿膁蚄蝕袈莃蕆蚆袇蒆莀羅袆膅薆袁裊芇莈螇裊莀薄蚃襖聿莇蕿羃膂薂袈羂芄蒞螄羈蒆薀螀羀膆蒃蚆罿羋蠆薂罿莁蒂袀羈肀蚇螆羇膃蒀螞肆芅蚅薈肅莇蒈袇肄肇芁袃肅艿薆蝿肅莂荿蚅肂肁薅薁肁膃莈衿肀芆薃螅腿莈莆蟻膈肈薁薇膇膀莄羆膇莂蝕袂膆蒅蒂螈膅膄蚈蚄螁芇蒁薀螁荿蚆衿袀聿葿螅衿膁蚄蝕袈莃蕆蚆袇蒆莀羅袆膅薆袁裊芇莈螇裊莀薄蚃襖聿莇蕿羃膂薂袈羂芄蒞螄羈蒆薀螀羀膆蒃蚆罿羋蠆薂罿莁蒂袀羈肀蚇螆羇膃蒀螞肆芅蚅薈肅莇蒈袇

3、肄肇芁袃肅艿薆蝿肅莂荿蚅肂肁薅薁肁膃莈衿肀芆薃螅腿莈莆蟻膈肈薁薇膇膀莄羆膇莂蝕袂膆蒅蒂螈膅膄蚈蚄螁芇蒁薀螁荿蚆衿袀聿葿螅衿膁蚄蝕袈莃蕆蚆袇蒆莀</p><p>  學(xué)校名稱:北京理工大學(xué)</p><p>  院(系)名稱:計(jì)算機(jī)科學(xué)與工程系</p><p>  本科生學(xué)號:9709004</p><p>  嵌 入 式 瀏 覽 器 開 發(fā)&l

4、t;/p><p>  專 業(yè): 計(jì)算機(jī)軟件</p><p>  本科生姓名: 高波 </p><p>  指導(dǎo)教師姓名:張麗芬</p><p><b>  摘 要</b></p><p>  本文主要論述了嵌入式瀏覽器開發(fā)所涉及到的技術(shù),對HTML詞法分析、瀏覽器JavaScript

5、支持、linux和gtk編程等做了詳細(xì)的分析和介紹,并對Netbit瀏覽器的開發(fā)進(jìn)行了介紹,分析了主要的模塊的功能和組成,并給出了主要算法。</p><p>  還對典型的嵌入式瀏覽器進(jìn)行了分析,包括Gzilla,Mozilla,Thunder和zen,總結(jié)了瀏覽器設(shè)計(jì)的技術(shù)要點(diǎn)和開發(fā)策略。</p><p>  另外,在論文開頭,介紹了目前嵌入式瀏覽器產(chǎn)品的發(fā)展現(xiàn)狀,嵌入式瀏覽器的組成和各

6、部份功能說明。</p><p>  HTML詞法分析是著重討論的技術(shù)問題,給出了詳盡的數(shù)據(jù)結(jié)構(gòu),程序流程。</p><p>  Netbit瀏覽器的開發(fā),是本論文的重點(diǎn),分模塊進(jìn)行了分析,提出了需要改進(jìn)的地方,并給出了改進(jìn)措施。</p><p>  關(guān)鍵詞:嵌入式瀏覽器,HTML詞法分析,Javascript,linux,gtk</p><p&g

7、t;<b>  ABSTRACT</b></p><p>  This paper is focused on the technology of embedded browser.Html scanner, JavaScript support for browser, linux and gtk programming are deeply discussed.and introduce

8、 the development of Netbit browser, analyse the main module of Netbit, the algorithm is presented. </p><p>  what’s more, other typical embedded browsers are analysed, include Gzilla,Mozilla,Thunder and zen,

9、and summarize the important technology and the policy of browser development</p><p>  In addition,at the head of the paper,introduce the present status of embedded browser product,the general form of embedde

10、d browser and description of the main parts.</p><p>  HTML scanner is an important technological problem, the data structure and the flow of the program are presented.</p><p>  The development o

11、f Netbit Browser is mainly discussed,and analysed by module,give the opinion to improve it.</p><p>  KEY WORDS:</p><p>  embedded browser,HTML token,Javascript,linux,gtk</p><p><

12、b>  目 錄</b></p><p>  引言………………………………………………………………5</p><p>  第一章 嵌入式瀏覽器設(shè)計(jì)概述 ………………………… 6</p><p>  1.1目前嵌入式瀏覽器產(chǎn)品的發(fā)展現(xiàn)狀 ……………………… 6</p><p>  1.2嵌入式瀏覽器的組成和各部份功能說明 ………

13、………… 8</p><p>  1.3開發(fā)難度分析 ……………………………………………… 9</p><p>  1.4開發(fā)的前期策劃 …………………………………………… 10</p><p>  第二章 HTML詞法分析器的設(shè)計(jì)及其應(yīng)用 …………… 12</p><p>  2.1 Bit Token的組成及其功能 ……………………………

14、…12</p><p>  2.2 數(shù)據(jù)結(jié)構(gòu) ……………………………………………………12</p><p>  2.3 算法 …………………………………………………………13</p><p>  2.4詞法分析結(jié)果示意……………………………………………15</p><p>  2.5 HTML詞法分析的應(yīng)用 ………………………………………15

15、</p><p>  第三章 瀏覽器JavaScript支持的實(shí)現(xiàn) …………………18</p><p>  3.1基本的JavaScript 開發(fā)環(huán)境 ………………………………18</p><p>  3.2 JavaScript Engine …………………………………………18</p><p>  3.3 JavaScript與瀏覽器接合

16、 ………………………………… 19</p><p>  3.4 瀏覽器消息響應(yīng) …………………………………………… 21</p><p>  第四章 Linux程序開發(fā)技術(shù)及 GTK圖形程序開發(fā)…… 23</p><p>  4.1 Linux下的程序開發(fā)環(huán)境 ……………………………………23</p><p>  4.2 GTK圖形程序開發(fā)

17、……………………………………………29</p><p>  第五章 Netbit瀏覽器開發(fā)與分析 ……………………… 31</p><p>  5.1 Netbit 瀏覽器簡介 ………………………………………… 31</p><p>  5.2 Netbit Browser瀏覽器各部份的功能 …………………… 31</p><p>  5.3

18、 界面模塊………………………………………………………32</p><p>  5.4 控制模塊………………………………………………………34</p><p>  5.5詞法分析模塊… ………………………………………………34</p><p>  5.6使用PIXMAP的畫圖模塊………………………………………35 </p><p>  5.7

19、文本文件的顯示模塊…………………………………………36</p><p>  5.8 HTML文件的顯示模塊 ……………………………………… 37</p><p>  5.9 Netbit實(shí)際應(yīng)用效果及比較 ……………………………… 40</p><p>  5.10 Netbit Browser的缺點(diǎn)分析及改進(jìn)辦法 …………………44</p><

20、p>  5.11 Netbit Browser未來的展望 ………………………………48</p><p>  第六章 其它瀏覽器分析…………………………………… 50</p><p>  6.1 Dillo(Gzilla)瀏覽器分析 ……………………………… 50</p><p>  6.2 Thunder瀏覽器分析…………………………………………55<

21、;/p><p>  6.3 Mozilla瀏覽器分析…………………………………………56</p><p>  6.4 ZEN瀏覽器分析………………………………………………57</p><p>  6.5 瀏覽器分析工作的總結(jié)………………………………………58</p><p>  致 謝…………………………………………………………… 60<

22、/p><p>  參考文獻(xiàn)表………………………………………………………61</p><p><b>  引 言</b></p><p>  隨著計(jì)算機(jī)、網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,新型的高科技含量的電子產(chǎn)品層出不窮,遍及家電、生產(chǎn)、軍事等各個領(lǐng)域。嵌入式系統(tǒng)因其體積小,速度快而受到重視。在掌上電腦、PDA、手機(jī)、導(dǎo)航設(shè)備、信息家電領(lǐng)域嵌入式系統(tǒng)被廣泛采用

23、,這也是近期產(chǎn)品研發(fā)的熱點(diǎn)。嵌入式瀏覽器作為重要的嵌入式系統(tǒng)應(yīng)用軟件,是不可或缺的。但目前,嵌入式瀏覽器產(chǎn)品的市場被少數(shù)國外大公司壟斷,眾多的小型嵌入式瀏覽器也尚處于發(fā)展期,而國內(nèi)的自主技術(shù)的嵌入式瀏覽器更屈指可數(shù),剛剛進(jìn)入實(shí)用階段。迫切需要更多的人來關(guān)注嵌入式瀏覽器技術(shù),開發(fā)中國自主知識產(chǎn)權(quán)的瀏覽器產(chǎn)品。</p><p>  本文闡述了嵌入式瀏覽器開發(fā)的關(guān)鍵技術(shù),并詳細(xì)說明Netbit Browser的實(shí)際開發(fā)

24、過程,技術(shù)細(xì)節(jié)。并以網(wǎng)站的方式公布了其源代碼,為國內(nèi)嵌入式瀏覽器的發(fā)展做了有益的嘗試。</p><p>  第一章 嵌入式瀏覽器設(shè)計(jì)概述</p><p>  1.1目前嵌入式瀏覽器產(chǎn)品的發(fā)展現(xiàn)狀</p><p>  1.1.1桌面瀏覽器簡介及其與嵌入式瀏覽器的區(qū)別:</p><p>  常見的桌面瀏覽器有微軟的Internet Explore

25、r,網(wǎng)景的Netscape,開放源碼的Mozilla,以及opera,mosaic,Hotjava,字符模式的lynx等。其中IE,Opera已有嵌入式版本,以上的大多數(shù)瀏覽器均有跨多平臺的版本。這些桌面型瀏覽器功能參差不齊,但大多能實(shí)現(xiàn)基本的瀏覽功能。其中IE與Netscape對HTML頁面的顯示效果均堪稱完美(對于XML,WML等標(biāo)準(zhǔn)的網(wǎng)頁瀏覽,本文不予討論)。</p><p>  與完美的瀏覽效果,功能豐富

26、,支持多種媒體格式和視音頻插件等優(yōu)點(diǎn)形成對立的是,這些瀏覽器龐大的體積和對機(jī)器配置的高要求。這也是桌面瀏覽器和嵌入式瀏覽器最大的區(qū)別。另外,桌面型瀏覽器通常是基于通用的操作系統(tǒng),用于桌面電腦如PC機(jī)、MAC機(jī)等。而嵌入式瀏覽器通?;趯S孟到y(tǒng)。</p><p>  需要指出的是,我們在網(wǎng)上??吹降囊恍┧^的優(yōu)秀瀏覽器,如Netcaptor,魔裝網(wǎng)神,騰訊,颶風(fēng),F(xiàn)antasia,金山WPS office的瀏覽器等

27、等,均為使用IE內(nèi)核的瀏覽器,使用了多頁面多線程的方式,降低了系統(tǒng)資源的耗費(fèi),方便了瀏覽,但軟件本身沒有多少技術(shù)可言,可以用Delphi,VB等工具輕易開發(fā)出來(如果不要求完善的功能,只需簡單到拖一個IE控件過去就行了),這也體現(xiàn)了微軟的COM+及ActiveX技術(shù)的強(qiáng)大。</p><p>  1.1.2常見嵌入式瀏覽器</p><p>  Internet Explorer for Wi

28、nCE,是IE的Windows CE版,這也意味著用戶為了使用它,必須選用基于WinCE平臺的產(chǎn)品,隨著微軟勢力在掌上終端領(lǐng)域的蔓延,WinCE版的IE必將大行其道。</p><p>  Access Netfront,Access是日本的瀏覽器大廠,占據(jù)了大部份的日本瀏覽器市場,其產(chǎn)品廣泛應(yīng)用于手持設(shè)備、機(jī)頂盒、游戲機(jī)等產(chǎn)品。其新推出的Netfront Linux版本可以免費(fèi)下載,網(wǎng)址是:http://www.

29、access.co.jp/product/develop。經(jīng)試用,發(fā)現(xiàn)Netfront瀏覽效果非常好,對中文的支持和表格的顯示效果,甚至超過Netscape 4.6 for Linux。而且支持鍵盤操作。可以使用箭頭鍵來選擇網(wǎng)址進(jìn)行跳轉(zhuǎn)。但顯然為了簡化設(shè)計(jì),Netfront使用了一定的權(quán)宜手段。比如它不支持使用<font>標(biāo)記來設(shè)置字體,也不支持樣式表,所有字體的大小是固定的,但一般情況不易發(fā)現(xiàn),不過由于Linux版本不是商

30、業(yè)性版本,無法就此推斷其他版本的特性。Netfront Linux版大小為1.9M,如再加以簡化(比如去掉一些圖片按鈕)可以做的更小。</p><p>  Gzilla,現(xiàn)名Dillo,是基于Linux,使用GTK作為GUI平臺開發(fā)的瀏覽器,其開發(fā)目的也包含嵌入式的應(yīng)用。是開放源碼項(xiàng)目。我們在設(shè)計(jì)Netbit Browser時主要參考了該瀏覽器的界面設(shè)計(jì)。該瀏覽器的缺點(diǎn)是不支持表格,布局過于簡單,不支持中文,瀏覽

31、效果比較差,優(yōu)點(diǎn)是網(wǎng)絡(luò)功能完善,支持cache緩沖,能夠支持多種圖片格式。網(wǎng)址是:http://www.gzilla.com。</p><p>  Viewml,使用FLTK作為GUI平臺開發(fā)的瀏覽器,主要面向嵌入式的應(yīng)用。是開放源碼項(xiàng)目。使用C++面向?qū)ο蟮脑O(shè)計(jì)。因?yàn)槭褂肍LTK,所以可以在嵌入式的Micro Window平臺運(yùn)行,該瀏覽器支持簡單的表格,界面還沒有做(只有一個主窗口),不支持中文,由于FLTK

32、的BUG比較多,我們在實(shí)際編譯時經(jīng)常出錯,即使編譯通過,也常常是還沒運(yùn)行就core dump了,但曾經(jīng)由某人編譯成功,基本可用,網(wǎng)址是:http://www.viewml.com。</p><p>  ZEN,一個并不知名的嵌入式瀏覽器,但卻十分優(yōu)秀,開放源碼項(xiàng)目,不僅支持表格,支持多種圖像格式,而且在設(shè)計(jì)上很有特色,將涉及到GUI平臺的部分獨(dú)立出來,用戶可以指定不同的GUI平臺運(yùn)行,內(nèi)置了對字符,SVGA和GT

33、K的支持,開發(fā)這只需按照相應(yīng)規(guī)范編寫該軟件的涉及GUI的部份,就可以將其移植到其它GUI平臺,而無須對整個軟件進(jìn)行修改。缺點(diǎn)是網(wǎng)絡(luò)功能比較弱,不支持多線程,另外其必須等到所有圖片下載完畢才開始布局,若某文件傳輸失敗則會導(dǎo)致死鎖,需用戶中斷。網(wǎng)址是:http://www.nocrew.org/software/zen/。</p><p>  以上主要介紹了開放源碼的嵌入式瀏覽器,因?yàn)槠鋵Ρ卷?xiàng)目具有實(shí)際的參考價值。&

34、lt;/p><p>  1.1.3 嵌入式瀏覽器的應(yīng)用領(lǐng)域</p><p>  嵌入式瀏覽器主要應(yīng)用于手持終端和信息家電,例如掌上電腦、3G手機(jī)、網(wǎng)絡(luò)機(jī)頂盒、具有網(wǎng)絡(luò)功能的其它家電,如可上網(wǎng)的電冰箱等,另外,在軍事等領(lǐng)域也有一定的應(yīng)用需求。</p><p>  1.2嵌入式瀏覽器的組成和各部份功能說明</p><p>  下面簡介主要的組成部份

35、,其設(shè)計(jì)原理后面將進(jìn)行專門論述。</p><p>  1.2.1 詞法分析</p><p>  主要是針對HTML進(jìn)行詞法分析,該詞法分析器實(shí)際是通用的,還可用于XML、WML的詞法分析,只需替換元素名稱即可。</p><p>  HTML詞法分析是瀏覽器設(shè)計(jì)的基礎(chǔ)環(huán)節(jié)之一,也是整個設(shè)計(jì)過程中重要的前端工作,其數(shù)據(jù)結(jié)構(gòu)的擬定與接下來的語法分析和布局算法密切相關(guān),詞法

36、分析的效率與準(zhǔn)確性、容錯性也關(guān)系到整個瀏覽器設(shè)計(jì)的質(zhì)量。</p><p><b>  1.2.2語法分析</b></p><p>  在大型的瀏覽器中,語法分析通常是獨(dú)立的模塊,但在嵌入式瀏覽器中,語法分析通常是與布局混合在一起的,即一邊進(jìn)行語法分析,一邊布局,不設(shè)立相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來存儲語法分析的結(jié)果。語法分析對布局的算法有直接的指導(dǎo)意義。</p>&l

37、t;p><b>  1.2.3布局</b></p><p>  本文中的布局應(yīng)理解為界面輸出前的預(yù)演和處理位置等信息的算法,而不是具體的畫圖和界面輸出。布局算法的好壞直接關(guān)系到界面的輸出效果,但布局算法也是要根據(jù)GUI所能實(shí)現(xiàn)的輸出效果來設(shè)計(jì)的,所以,GUI往往成為系統(tǒng)的瓶頸,如果GUI提供的支持有限,即使有再好的布局算法,也是紙上談兵,無用武之地。</p><p&

38、gt;  1.2.4 GUI及軟件界面</p><p>  GUI是指圖形用戶界面,瀏覽器無疑是一個圖形函數(shù)庫的大需求者,選擇好的GUI環(huán)境實(shí)屬不易,為了能夠?qū)崿F(xiàn)專有的功能,瀏覽器開發(fā)者往往還要對基礎(chǔ)的GUI庫進(jìn)行包裝、改寫,甚至寫自己的控件。所有這些,是需要有專業(yè)的GUI庫開發(fā)經(jīng)驗(yàn)的專職人員來完成。</p><p>  GUI的功勞第一在于軟件的操作界面,如窗口、菜單、工具條、滾動條等

39、。第二在于主瀏覽窗體中的圖形元素的輸出(通常以自畫控件的方式)。前者通常直接使用GUI庫中的已有控件,編程難度很小,后者主要利用基本的點(diǎn)線函數(shù),編程難度比較大。</p><p>  JavaScript支持</p><p>  實(shí)際上JavaScript的編譯器是開放源碼的,而且全世界通用,包括IE、Mozilla、Netscape等瀏覽器都使用相同的JavaScript的編譯器,但為何其

40、對JavaScript的支持不盡相同呢,這是因?yàn)镴avaScript在瀏覽器里主要是用于操縱界面元素和與瀏覽器內(nèi)部命令進(jìn)行結(jié)合。這實(shí)際上是程序員努力的結(jié)果,而不是JavaScript編譯器的功勞。這其中的機(jī)制將在后面專門介紹。</p><p><b>  IO</b></p><p>  主要是指通過HTTP協(xié)議或文件系統(tǒng)來讀取網(wǎng)頁內(nèi)容,網(wǎng)絡(luò)部份超出了本論文的討論范圍

41、,不予詳述,后面將介紹與網(wǎng)絡(luò)部份的接口。</p><p>  以上主要按工作的性質(zhì)進(jìn)行分類,介紹了瀏覽器設(shè)計(jì)的主要幾個部份,但與實(shí)際開發(fā)工作的人員劃分不同,實(shí)際工作要考慮人員的實(shí)際能力和經(jīng)驗(yàn),結(jié)合要實(shí)現(xiàn)的目標(biāo),對各部份的投入也有輕重緩急之分,比如,如果沒有詞法分析的先行實(shí)現(xiàn),語法分析與布局都是紙上談兵。GUI平臺不確定,布局工作也無法展開。</p><p><b>  1.3開發(fā)

42、難度分析</b></p><p>  我們也可以看到,要設(shè)計(jì)效果較好的瀏覽器產(chǎn)品,決不是三五個人、兩三條槍就能辦到的,參與工作的人員不僅需要有相關(guān)經(jīng)驗(yàn),還需要有一定的投入,一方面對程序員艱苦的工作給予鼓勵,另一方面也可能需要購買一些成熟的開發(fā)包,在基礎(chǔ)的開發(fā)平臺、測試平臺上也要有一定的投資,總的來說,開發(fā)自主技術(shù)的瀏覽器產(chǎn)品是有一定的風(fēng)險的,這也是國內(nèi)目前相關(guān)產(chǎn)品為數(shù)不多的原因。國外大公司在相關(guān)領(lǐng)域的

43、科研與實(shí)踐已很成熟,在大量投入之后,其產(chǎn)品已為廣大用戶所接受,國內(nèi)的企業(yè)若從零做起,也很難追趕。因而買斷技術(shù),加以改進(jìn)也可以成為快速成長的一條道路。</p><p>  1.4開發(fā)的前期策劃</p><p>  以下的工作均是建立在大量的調(diào)查基礎(chǔ)上的。是瀏覽器開發(fā)前期準(zhǔn)備工作所解決的問題。</p><p><b>  平臺的選取</b><

44、/p><p>  目前的商業(yè)化嵌入式操作系統(tǒng)功能完善,但使用費(fèi)用高昂,使用Linux內(nèi)核的嵌入式操作系統(tǒng)不僅功能強(qiáng)大,便于開發(fā)移植,而且費(fèi)用低廉,基于Linux的嵌入式系統(tǒng)已日漸成熟,也有相應(yīng)的窗口系統(tǒng)可以使用,我們使用PC上的Linux來進(jìn)行瀏覽器開發(fā),是再好不過的了,軟件從PC移植到嵌入式設(shè)備只需重新編譯一下就可以了(前提是使用的函數(shù)庫、開發(fā)包同時具有PC和嵌入式的版本)。</p><p>

45、;<b>  GUI的選取</b></p><p>  GUI的選取是頗費(fèi)腦筋的問題,一方面要考慮嵌入式系統(tǒng)是否有對應(yīng)的版本,一方面要考慮該GUI的功能是否足夠?qū)嵱谩?lt;/p><p>  目前常見的基于Linux的GUI開發(fā)包主要有GTK、FLTK、QT、KDE等,其中FLTK有Micro Window的版本,是比較好的選擇,但使用FLTK開發(fā)的軟件還比較少,對于初學(xué)

46、者進(jìn)入的難度更大,而且目前BUG較多,而GTK比較成熟,使用GTK的軟件比比皆是,資料也很豐富,我們的參考對象Gzilla也使用GTK,也就是說如果使用GTK,將有很好的原型進(jìn)行參考,這使得GTK對于目前毫無GUI開發(fā)經(jīng)驗(yàn)的瀏覽器開發(fā)組而言,充滿了巨大的誘惑。考慮到GUI是可以成為獨(dú)立模塊的,如瀏覽器ZEN的設(shè)計(jì),我們決定使用GTK,待時機(jī)成熟可換用其它平臺,也并非難事。</p><p>  在前期,我們也對FL

47、TK加以了研究,還嘗試了以FLTK為基礎(chǔ)構(gòu)建GUI中間層的辦法,但由于工作量巨大,初步估算需2萬行程序,而不得不暫緩該計(jì)劃。建立GUI中間層在理論上是可行的,這樣,在必要時可以釜底抽薪,替換掉基礎(chǔ)的GUI平臺,應(yīng)用軟件完全不需修改,但中間層與基礎(chǔ)層的接口要重寫,其工作量也很大,未必是核算的買賣。</p><p>  確定要實(shí)現(xiàn)的基本功能</p><p>  鑒于對瀏覽器開發(fā)難度的充分考慮,

48、以及現(xiàn)有人員的水平,擬定實(shí)現(xiàn)以下功能,以及需要考慮但暫不予實(shí)現(xiàn)的功能。</p><p><b>  需要實(shí)現(xiàn)的包括:</b></p><p>  (1)界面:包括窗口,菜單,輸入框,工具條,滾動條等的支持。</p><p>  (2)詞法分析:必須實(shí)現(xiàn)實(shí)用的HTML詞法分析,支持HTML4.0全部元素。</p><p&g

49、t;  (3)實(shí)現(xiàn)簡單網(wǎng)頁的布局:實(shí)現(xiàn)對簡單網(wǎng)頁的查看。</p><p>  (4)支持基本IO,支持采用線程的網(wǎng)絡(luò)傳輸。</p><p><b>  需要考慮的功能:</b></p><p>  (1)JavaScript支持</p><p><b>  (2)漢字支持</b></p

50、><p>  (3)圖片格式支持</p><p><b>  (4)表單支持</b></p><p>  (5)頁面元素的消息響應(yīng)</p><p><b>  人員分工</b></p><p>  由于情況的變動,造成了人員比較緊張,在前期準(zhǔn)備工作中,人力充沛,使得收集的資

51、料比較完備,打下了較好的基礎(chǔ)。在后期簡化了目標(biāo),雖然人員減少,但也能夠?qū)崿F(xiàn)主要的工作。考慮到網(wǎng)絡(luò)是比較獨(dú)立的部份,把它分出去由專人負(fù)責(zé)。</p><p>  第二章 HTML詞法分析器的設(shè)計(jì)及其應(yīng)用</p><p>  HTML詞法分析是瀏覽器設(shè)計(jì)的基礎(chǔ)環(huán)節(jié)之一,也是整個設(shè)計(jì)過程中重要的前端工作,其數(shù)據(jù)結(jié)構(gòu)的擬定與接下來的語法分析和布局算法密切相關(guān),詞法分析的效率與準(zhǔn)確性、容錯性也關(guān)系到整

52、個瀏覽器設(shè)計(jì)的質(zhì)量。</p><p>  下面將介紹一個HTML詞法分析器——Bit Token的設(shè)計(jì)思路。</p><p>  Bit Token是Netbit Browser的HTML詞法分析器,使用標(biāo)準(zhǔn)C編程,Netbit Browser是基于Linux/Gtk的瀏覽器,開放源碼項(xiàng)目,網(wǎng)址是http://netbit_browser.myetang.com。</p>&

53、lt;p>  Bit Token的組成及其功能</p><p>  Bit Token作為Netbit Browser的詞法分析部份,負(fù)責(zé)對接收的HTML代碼進(jìn)行詞法分析,主要的目的是提取網(wǎng)頁中元素的名稱及其屬性,并以恰當(dāng)?shù)男问剑窗匆欢ǖ臄?shù)據(jù)結(jié)構(gòu))加以保存,也就是完成了將數(shù)據(jù)流離散化、結(jié)構(gòu)化的過程。</p><p>  主要由以下幾個部分組成:</p><p&g

54、t;  初始化:完成對數(shù)據(jù)結(jié)構(gòu)的初始化,主要是分配內(nèi)存,變量賦初值。</p><p>  主體的數(shù)據(jù)流分析:逐字符的進(jìn)行判斷,確定數(shù)據(jù)的歸屬類型。</p><p>  元素的分析:提取元素的名稱、屬性和值域。</p><p>  釋放:主要是對內(nèi)存的釋放。</p><p><b>  數(shù)據(jù)結(jié)構(gòu)</b></p>

55、<p>  typedef struct BitTokenContext</p><p>  {char * strBuffer; //當(dāng)前正在處理的HTML代碼</p><p>  int bufferLength;</p><p>  int curPosition;</p><p>  char * gl

56、obal_strBuffer; //全局HTML代碼</p><p>  int global_bufferLength;</p><p>  int global_curPosition;</p><p>  BitTokenList *tokenList; //元素節(jié)點(diǎn)鏈表</p><p>  BitTokenList *

57、tokenList_tail;</p><p>  BitPTagListpTagList;//元素名稱表,指向靜態(tài)數(shù)據(jù)</p><p>  }BitTokenContext,*BitPTokenContext;</p><p>  BitTokenContext是用于存儲當(dāng)前待分析網(wǎng)頁全局屬性的數(shù)據(jù)結(jié)構(gòu),其中TokenList是核心的元素節(jié)點(diǎn)鏈表。詞法分析的

58、目的就是生成這樣一個鏈表。下面給出該鏈表的數(shù)據(jù)結(jié)構(gòu),是很簡單的雙向鏈表。</p><p>  typedef struct TokenList</p><p>  { BitToken *token; //元素節(jié)點(diǎn)</p><p>  struct TokenList *priou;</p><p>  struct TokenList *

59、next;</p><p>  }BitTokenList,*BitPTokenList;</p><p>  以下是元素節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu):</p><p>  typedef struct BitToken</p><p>  {int type; //節(jié)點(diǎn)類型,如定義的HTML_BODY,HTML_TXT等。</p>&l

60、t;p>  char *pData; //如果是HTML_TXT型元素,則為其內(nèi)容,否則為空</p><p>  BOOL end; //是否是結(jié)束元素,如</body></p><p>  BitTokenAttrList *attrList; //元素屬性鏈表,因?yàn)榭赡苡卸鄠€屬性,所以使用鏈表存儲</p><p>  BitTokenAtt

61、rList *attrList_tail;</p><p>  }BitToken,*BitPToken;</p><p>  請注意,以上出現(xiàn)tail標(biāo)記的指針變量,如BitTokenList * tokenList_tail等,其作用是用于保存鏈表結(jié)尾節(jié)點(diǎn)指針,便于在釋放內(nèi)存時,直接找到鏈尾,提高了算法的效率。</p><p><b>  算法<

62、/b></p><p>  2.3.1 基本算法:</p><p>  首先介紹基本的算法:</p><p>  (1) 從存儲網(wǎng)頁的字符串中,順序讀入一個字符</p><p>  (2) 如果遇到 < ,認(rèn)為遇到TAG(元素),處理該元素,使用函數(shù)Token_ConsumTag(),處理完畢后,指針移到該元素尾。</p&g

63、t;<p>  (3) 如果遇到回車、空格,則跳過。</p><p>  (4) 如果遇到 > ,則跳過(不應(yīng)該出現(xiàn)此情況,為了容錯)。</p><p>  (5) 如果非以上情況,則認(rèn)為遇到文字,處理這段文字,使用函數(shù)Token_Consum_PlainText()。處理完畢,指針指向下一個元素首。</p><p>  (6) 循環(huán)以上操作,直

64、到該網(wǎng)頁分析完畢。</p><p>  由此看來,主算法十分簡單而清晰,主要是Token_ConsumTag()和Token_Consum_PlainText()這兩個函數(shù)起關(guān)鍵作用,由于其中涉及到許多細(xì)節(jié)問題,此處不予詳述。</p><p>  2.3.2 算法效率與改進(jìn):</p><p>  采用以上的基本算法,是可用的,但當(dāng)網(wǎng)頁比較大的時候,比如600K,該算

65、法的效率成倍下降,這主要是由于要處理的字符串太大,在內(nèi)存中完成查找、替換、復(fù)制、移動等操作,響應(yīng)時間明顯下降。對此的改進(jìn)辦法就是分段進(jìn)行詞法分析,不僅極大的提高了效率(在某些情況下約提高30倍),也有利于瀏覽器整體設(shè)計(jì),因?yàn)楫?dāng)網(wǎng)頁較大時,若等待全部內(nèi)容傳輸完畢,再一次性完成詞法分析和布局,用戶會感到等待時間過長,一般現(xiàn)在成熟的瀏覽器都采用邊傳輸,邊分析,邊顯示。</p><p>  分段進(jìn)行詞法分析的算法復(fù)雜度明

66、顯增加,比如,當(dāng)每段定為1024字節(jié),在第1024字節(jié)處,可能正好將一個完整元素截?cái)啵闯R?guī)分析方法會造成錯誤。解決的辦法是,采用回溯,確認(rèn)要分析的部份至少包含1個完整元素。</p><p>  具體做法是:判斷1024字節(jié)處是否為元素結(jié)束字符 ‘>’,如果不是,則判斷前一個字節(jié),直到找到元素結(jié)束字符為止,這樣可保證至少包含一個元素。</p><p>  采用分段進(jìn)行詞法分析,實(shí)際每

67、次分析的代碼會不足1024字節(jié),余下的部份匯入到下一段的分析過程即可,直到所有內(nèi)容被分析完畢。</p><p>  2.4詞法分析的結(jié)果</p><p>  下面是一段很簡單的HTML代碼。</p><p><b>  <html></b></p><p>  <img src=“go.gif” wid

68、th=200 height=100></p><p>  <a HREF="http://www.263.net">首都在線</a></p><p><b>  </html></b></p><p>  分析后,數(shù)據(jù)存儲結(jié)構(gòu)如下</p><p><b&

69、gt; ?。?lt;/b></p><p>  可以看到,詞法分析的結(jié)果是一個元素節(jié)點(diǎn)鏈表,每個節(jié)點(diǎn)的屬性也形成了一個鏈表,元素節(jié)點(diǎn)是有先后順序的,元素屬性的先后順序是無所謂的。</p><p>  詞法分析將網(wǎng)頁的文本數(shù)據(jù)流以清晰的結(jié)構(gòu)表現(xiàn)出來,這樣,在后面的應(yīng)用中就可以很容易的遍歷各節(jié)點(diǎn),并輕松地獲得各元素節(jié)點(diǎn)的屬性。</p><p>  2.5 HTML

70、詞法分析的應(yīng)用</p><p>  2.5.1 應(yīng)用舉例:</p><p>  HTML詞法分析程序通常應(yīng)用于瀏覽器設(shè)計(jì)、網(wǎng)頁制作軟件設(shè)計(jì)等領(lǐng)域,本人以一個使用VC開發(fā)的軟件“HTML智能分析”來舉例說明,下載網(wǎng)址:</p><p>  http://netbit_browser.myetang.com/introduce.html。</p><

71、p>  “HTML智能分析”同樣使用Bit Token詞法分析器,“HTML智能分析”是一個網(wǎng)頁信息提取、處理軟件。</p><p><b>  具有以下主要功能:</b></p><p>  1、智能提取網(wǎng)頁中的文字信息,智能排版,并可在進(jìn)行編輯后保存。</p><p>  2、統(tǒng)計(jì)網(wǎng)頁的有關(guān)信息。</p><p&g

72、t;  3、根據(jù)用戶設(shè)置的版式,將分析和編輯的結(jié)果,自動生成新的網(wǎng)頁。</p><p>  用戶可使用該軟件來將HTML轉(zhuǎn)為TXT格式,其對HTML中文字內(nèi)容的提取準(zhǔn)確、快速、不含冗余信息,版式工整清晰,保持本來面貌。</p><p>  其主要設(shè)計(jì)思路是,在Bit Token詞法分析器的基礎(chǔ)上,結(jié)合瀏覽器布局的基本算法,對影響到TXT版面效果的元素進(jìn)行處理。</p><

73、;p>  比如<PRE>標(biāo)記,代表所包含的內(nèi)容瀏覽器應(yīng)不予分析,按TXT格式輸出,而如表格<TR>等元素則意味著需要換行。而在HTML中,在無<PRE>這種特殊情況時,回車都是忽略不記的。這就造成了矛盾。使用常規(guī)的簡單算法進(jìn)行HTML到TXT的轉(zhuǎn)換無法解決這些問題。造成轉(zhuǎn)換后的版式“失真“。而“HTML智能分析”卻能很好的解決。</p><p>  由于“HTML智能分析

74、”使用了底層的詞法分析技術(shù),還可以很容易的過濾掉<SCRIPT>與<STYLE>(樣式表)。并可以對網(wǎng)頁中的元素進(jìn)行統(tǒng)計(jì)和語法校驗(yàn)。</p><p>  以下是該程序的片斷:</p><p>  pTtokenList=global_cx->tokenList; //取首節(jié)點(diǎn)</p><p>  while(pTtokenList!=N

75、ULL) //循環(huán)直至處理完所有節(jié)點(diǎn)</p><p><b>  {</b></p><p>  switch(pTtokenList->token->type)</p><p>  {//根據(jù)節(jié)點(diǎn)類型,做不同的處理</p><p>  case HTML_TITLE: ……</p><p

76、>  case HTML_TEXT: ……</p><p>  default: ……</p><p>  } //switch</p><p>  pTtokenList=pTtokenList->next; //取下一個節(jié)點(diǎn)</p><p><b>  } //while</b></p>

77、<p>  這段程序?qū)嶋H上就是一個簡單的語法分析和布局的過程。</p><p>  2.5.2 Bit Token在應(yīng)用中存在的問題及修改意見</p><p>  由于HTML的標(biāo)記多是成對出現(xiàn)的,并且存在<SCRIPT>這樣的特殊元素,其內(nèi)容為Javascript程序,函數(shù)的字符串參數(shù)等可能包含其它的元素標(biāo)記。例如語句:Alert(“<font>

78、is a tag”);</p><p>  因此,在詞法分析時要對<SCRIPT>標(biāo)記進(jìn)行特殊處理,遇到<SCRIPT>就應(yīng)逐字符讀入后面的內(nèi)容,直到遇到下一個</SCRIPT>標(biāo)記。目前的Bit Token由于開發(fā)時間所限,未對其加以特殊處理,存在一些問題,但由于瀏覽器對Javascript的支持是較復(fù)雜的工作,目前的Netbit Browser尚不予實(shí)現(xiàn),因而沒有導(dǎo)致明顯問

79、題,而“HTML智能分析”這個軟件只是需要對Javascript進(jìn)行刪除操作,也不會造成影響。盡管如此,對<SCRIPT>的特殊處理還是有待完善,盡管這同時也會帶來一些問題,需要進(jìn)行大量的測試,來保證新加入代碼的穩(wěn)定性。</p><p>  正如前面所述,HTML詞法分析是瀏覽器設(shè)計(jì)的基礎(chǔ)環(huán)節(jié)之一,但并非最重要和最具難度的環(huán)節(jié),若想開發(fā)出效果較好的瀏覽器產(chǎn)品,還要在布局和GUI設(shè)計(jì)上多下功夫。<

80、/p><p>  第三章 瀏覽器JavaScript支持的實(shí)現(xiàn)</p><p>  本部份主要針對Mozilla和Netscape瀏覽器源代碼的JavaScript部份進(jìn)行了分析,闡述了瀏覽器Javascript實(shí)現(xiàn)的機(jī)制。</p><p>  3.1基本的JavaScript 開發(fā)環(huán)境</p><p>  JavaScript Referenc

81、e與JavaScript API:</p><p>  JavaScript Reference是Mozilla所使用JavaScript開發(fā)環(huán)境,是使用ANSI C的獨(dú)立的開發(fā)包,據(jù)Mozilla文檔介紹,該開發(fā)包涉及到超過160家公司的版權(quán)。而且被廣泛使用,實(shí)際已成為了進(jìn)行JavaScript應(yīng)用開發(fā)的標(biāo)準(zhǔn)平臺。</p><p>  JavaScript Reference可以用于建立

82、包含JavaScript runtime的Library或 DLL。既可以編譯成小的 "shell" 程序(像早期的BASIC),又連接Library后生成交互式的JavaScript解釋器,也可以用來解釋.js 文件。由于使用了ANSI C編程,可以用VC、GCC等編譯器在不同平臺下編譯。</p><p>  生成的"shell" 程序,對比瀏覽器對JavaScript的

83、支持,相同之處是使用相同的包含JavaScript runtime的Library 或 DLL,我們把這部份相同的Library或 DLL稱為JavaScript API,我們實(shí)際開發(fā)JavaScript應(yīng)用,也是在JavaScript API基礎(chǔ)上工作,而不用過多考慮其內(nèi)部的實(shí)現(xiàn)。關(guān)于JavaScript API,參見JavaScript API詳解。JavaScript API實(shí)際就是Javscript解釋器的對外接口函數(shù)庫。<

84、;/p><p>  JavaScript Engine</p><p>  JavaScript Engine是瀏覽器開發(fā)者為了利用JavaScript API來實(shí)現(xiàn)實(shí)際應(yīng)用而設(shè)立的中間層,用于初始化JavaScript環(huán)境,提供對JavaScript解釋、執(zhí)行的接口。瀏覽器主體程序的設(shè)計(jì)者可以通過JavaScript Engine,方便的實(shí)現(xiàn)各種應(yīng)用,畢竟JavaScript API太基礎(chǔ)了

85、,直接使用不太方便。</p><p>  下面介紹JavaScript Engine的主要功能和實(shí)現(xiàn)方法。這也包含了利用JavaScript API進(jìn)行應(yīng)用的基本思路。</p><p><b>  (1) 初始化:</b></p><p>  內(nèi)存分配:rt=JS_Init(10000L);</p><p>  初始化c

86、x:cx = JS_NewContext(rt, STACK_CHUNK_SIZE);</p><p>  初始化globalObj:globalObj = JS_NewObject(cx, &globalClass, 0, 0);</p><p>  定義標(biāo)準(zhǔn)類:JS_InitStandardClasses(cx, globalObj);</p><p>

87、  定義系統(tǒng)函數(shù):JS_DefineFunctions(cx, globalObj, g_functions);</p><p>  定義報錯函數(shù):JS_SetErrorReporter(cx,JS_ErrorReporter);</p><p><b>  注冊其它類:</b></p><p>  RegisterClassPoint(c

88、x,globalObj);</p><p>  RegisterClassSize(cx,globalObj);</p><p>  RegisterClassRect(cx,globalObj);</p><p>  RegisterClassPolygon(cx,globalObj);</p><p>  RegisterCla

89、ssColorKey(cx,globalObj);</p><p>  RegisterClassTDTimer(cx,globalObj);</p><p>  初始化定時器:TDTimerListInit();</p><p>  (2) 提供對JavaScript解釋、執(zhí)行的接口函數(shù):</p><p>  TD_EvaluateSc

90、ript(JSContext *cx,JSObject *obj, const char *bytes, uintN length,const char *filename, uintN lineno,jsval *rval)</p><p>  JavaScript與瀏覽器接合</p><p>  基本概念:JavaScript操作HTML元素的常見方式</p><p

91、><b>  例:</b></p><p>  <html><head></p><p>  <script><!--</p><p>  function ChangeImage(index)</p><p>  {image0.src="a"+ind

92、ex+".gif";}</p><p>  --></script></p><p><b>  </head></b></p><p>  <a onmouseover="ChangeImage(0);">軍人</a><br></p

93、><p>  <a onmouseover="ChangeImage(1);">眼睛</a><br></p><p>  <img id="image0" src="a0.gif"></img></p><p><b>  </html

94、></b></p><p>  當(dāng)鼠標(biāo)移到文字上時,觸發(fā)事件mouseover,調(diào)用ChangeImage()函數(shù),使得圖像源(SRC)發(fā)生變化,重新調(diào)入新圖片。</p><p>  由此產(chǎn)生兩個關(guān)鍵問題:</p><p>  javascript如何獲取HTML元素的名稱和屬性。</p><p>  javascript如

95、何改變HTML元素的屬性,并操作WIDGET重畫。</p><p>  下面分別闡述這兩個問題:</p><p>  首先介紹涉及到的瀏覽器流程:</p><p>  問題1解決:HTML元素作為Javascript對象進(jìn)行注冊。</p><p>  注冊過程在BuildModel中進(jìn)行。BuildModel的首要任務(wù)是將Token后的結(jié)點(diǎn)按

96、包含關(guān)系展成一棵樹。其次就是要將某些結(jié)點(diǎn)注冊為JavaScript對象。</p><p><b>  注冊的過程是:</b></p><p>  定義新對象:JSObject *proto;</p><p><b>  初始化該對象:</b></p><p>  TD_JSXMLElementCla

97、ssInit(JS_GetGlobalContext(),</p><p>  (void **)&proto))</p><p>  使用JS_DefineObject或JS_NewObject定義對象屬性:</p><p>  根據(jù)是否定義了該元素的名稱區(qū)別對待:</p><p>  if(TD_XMLContentIsNamed

98、Item(aElement,&aName))</p><p>  {parent = js_GetGlobalObject();</p><p>  *aReturn=JS_DefineObject(JS_GetGlobalContext(),js_GetGlobalObject(),aName->mStr,&ElementClass,proto,JSPROP_EN

99、UMERATE);</p><p><b>  }</b></p><p><b>  else</b></p><p>  {parent=aElement->parent->mScriptObject;</p><p>  *aReturn = JS_NewObject(JS_Ge

100、tGlobalContext(), &ElementClass, proto, parent);</p><p><b>  }</b></p><p><b>  將對象加入:</b></p><p>  JS_SetPrivate(JS_GetGlobalContext(), (JSObject *)*aRet

101、urn, aElement);這樣,在編譯時,HTML元素的標(biāo)識就能被Javascript編譯器識別,否則會報錯變量未定義。</p><p>  問題2解決:利用注冊給對象的函數(shù)實(shí)現(xiàn)操作符的功能化。</p><p>  具體可理解為:當(dāng)image0.src=”1.gif”被執(zhí)行時,相當(dāng)于為對象設(shè)置或改變屬性,此時SetElementProperty函數(shù)被調(diào)用(該函數(shù)在注冊該對象時由JSXM

102、LElementClassInit捆綁給該對象,其內(nèi)容由用戶自己定義),SetElementProperty通過函數(shù)指針調(diào)用函數(shù)TD_JSXMLSetAtrByID,改變結(jié)點(diǎn)樹上結(jié)點(diǎn)屬性,并重新生成該節(jié)點(diǎn)對應(yīng)的widget,重畫界面。</p><p>  問題3:如何建立Javascript對象與結(jié)點(diǎn)樹上結(jié)點(diǎn)的對應(yīng)?</p><p>  解決: Javascript對象與結(jié)點(diǎn)樹是同時生成的

103、,它們的共同性質(zhì)是結(jié)點(diǎn)具有相同屬性,Javascript對象根據(jù)ID屬性查找樹,找到要操作的對應(yīng)結(jié)點(diǎn)。</p><p><b>  瀏覽器消息響應(yīng)</b></p><p>  在主消息循環(huán)中調(diào)用TDWidgetProcessMsg,處理與widget有關(guān)消息。</p><p>  首先:取得當(dāng)前焦點(diǎn)所在的widget</p>&l

104、t;p>  pWidget=TDWidgetGetAtPoint(pThis->baseDoc.base.mWidget,pt,&index);</p><p>  處理該widget對該消息的響應(yīng)。</p><p>  最后一般為調(diào)用JavaScript執(zhí)行,實(shí)現(xiàn)實(shí)際響應(yīng)。</p><p>  TDVOID TDWidgetDoAction(

105、TDPWidgetAction pAnchor)</p><p><b>  {</b></p><p>  jsval jval;</p><p>  if(pAnchor)</p><p>  TD_EvaluateScript(JS_GetGlobalContext(),js_GetGlobalObject(),&

106、lt;/p><p>  pAnchor->mAction.mStr,pAnchor->mAction.mLength,TDNULL,0,&jval);</p><p><b>  }</b></p><p>  其中pAnchor->mAction.mStr即為界面對象(widget)對應(yīng)的JavaScript源碼,解釋執(zhí)

107、行的結(jié)果就是調(diào)用為該對象注冊的函數(shù)來重畫該widget,從而實(shí)現(xiàn)動態(tài)效果。</p><p>  第四章 Linux程序開發(fā)技術(shù)及 GTK圖形程序開發(fā)</p><p>  Linux下的程序開發(fā)環(huán)境</p><p><b>  4.1.1基本知識</b></p><p>  (1) 標(biāo)準(zhǔn) (ANSI C, POSIX,

108、SVID, XPG, ...)ANSI C:這一標(biāo)準(zhǔn)是 ANSI(美國國家標(biāo)準(zhǔn)局)于 1989 年制定的 C 語言標(biāo)準(zhǔn)。 后來被 ISO(國際標(biāo)準(zhǔn)化組織)接受為標(biāo)準(zhǔn),因此也稱為 ISO C。</p><p>  POSIX:該標(biāo)準(zhǔn)最初由 IEEE 開發(fā)的標(biāo)準(zhǔn)族,部分已經(jīng)被 ISO 接受為國際標(biāo)準(zhǔn)。</p><p>  SVID:System V 的接口描述。System V 接口描述

109、(SVID)是描述 AT&T Unix System V 操作 系統(tǒng)的文檔,是對 POSIX 標(biāo)準(zhǔn)的擴(kuò)展超集。</p><p>  XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company, Ltd.出版), 是比 POSIX 更為一般的標(biāo)準(zhǔn)。</p><p>  (2) 函數(shù)庫和系統(tǒng)調(diào)用 glibc:眾所周知,C 語言并沒有為常見的操作

110、,例如輸入/輸出、內(nèi)存管理,字符串操作等提供內(nèi)置的支持。相反,這些功能一般由標(biāo)準(zhǔn)的“函數(shù)庫”來提供。GNU 的 C 函數(shù)庫,即 glibc,是 Linux 上最重要的函數(shù)庫,它定義了 ISO C 標(biāo)準(zhǔn)指定的所有的庫函數(shù),以及由 POSIX 或其他 UNIX 操作系統(tǒng)變種指定的附加特色,還包括有與 GNU 系統(tǒng)相關(guān)的擴(kuò)展。目前,流行的 Linux 系統(tǒng)使用 glibc 2.0 以上的版本。glibc 基于如下標(biāo)準(zhǔn):ISO C: C 編程語

111、言的國際標(biāo)準(zhǔn),即 ANSI C,POSIX,Berkeley Unix,SVID,XPG。</p><p>  其他重要函數(shù)庫:除 glibc 之外,流行的 Linux 發(fā)行版中還包含有一些其他的函數(shù)庫,這些函數(shù)庫具有重要地位,例如:GNU Libtool,CrackLib,LibGTop。圖形文件操作函數(shù)庫包括: libungif、libtiff、libpng、Imlib, libjpeg 等,可分別用來操作

112、GIF、TIFF、PNG、JPEG 以及其他一些格式圖形文件。</p><p><b>  (3) 系統(tǒng)調(diào)用</b></p><p>  系統(tǒng)調(diào)用是操作系統(tǒng)提供給外部程序的接口。在 C 語言中,操作系統(tǒng)的系統(tǒng)調(diào)用通常通過函數(shù)調(diào)用的形式完成,在 Linux 系統(tǒng)中,系統(tǒng)調(diào)用函數(shù)定義在 glibc 中。</p><p>  談到系統(tǒng)調(diào)用時,需要

113、注意如下幾點(diǎn):系統(tǒng)調(diào)用函數(shù)通常在成功時返回 0 值,不成功時返回非零值。errno 中包含有錯誤代碼。系統(tǒng)調(diào)用是一個非常耗時 的過程。(4) C 語言編程風(fēng)格 良好的編程風(fēng)格可以在許多方面幫助開發(fā)人員,可以增加代碼的可讀性,并幫助你理清頭緒。編程風(fēng)格最能體現(xiàn)一個程序員的綜合素質(zhì)。</p><p>  在 Linux 中,我們經(jīng)??吹降氖嵌x非常簡單的函數(shù)接口和變量名稱。C 語言最初來自 UNIX 操作系統(tǒng)

114、,與 UNIX 的設(shè)計(jì)原則一樣,C 語言被廣泛認(rèn)可和使用的一個重要原因是它的靈活性以及簡潔性。在利用 C 語言編寫程序時,應(yīng)當(dāng)符合其簡潔的設(shè)計(jì)原則,而不應(yīng)當(dāng)使用非常復(fù)雜的變量命名方法。Linus 為 Linux 內(nèi)核定義的 C 語言編碼風(fēng)格要點(diǎn)如下:</p><p>  縮進(jìn)時,使用長度為 8 個字符寬的 Tab 鍵。如果程序的縮進(jìn)超過 3 級,則應(yīng)考慮重新設(shè)計(jì)程序。</p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論