在上一小節(jié),讀者已經(jīng)了解到了make項(xiàng)目管理器的強(qiáng)大功能。的確,makefile可以幫助make完成它的使命,但要承認(rèn)的是,編寫(xiě)makefile確實(shí)不是一件輕松的事,尤其對(duì)于一個(gè)較大的項(xiàng)目而言更是如此。那么,有沒(méi)有一種輕松的手段生成makefile而同時(shí)又能讓用戶享受make的優(yōu)越性呢?
通過(guò)指定指令的vi操作練習(xí),使讀者能夠熟練使用vi中的常見(jiàn)操作,并且熟悉vi的3種模式,如果讀者能夠熟練掌握實(shí)驗(yàn)內(nèi)容中所要求的內(nèi)容,則表明對(duì)vi的操作已經(jīng)很熟練了。
本章是Linux中進(jìn)行C語(yǔ)言編程的基礎(chǔ),首先講解了C語(yǔ)言編程的關(guān)鍵點(diǎn),這里關(guān)鍵要了解編輯器、編譯鏈接器、調(diào)試器及項(xiàng)目管理工具等概念。
串口是計(jì)算機(jī)一種常用的接口,常用的串口有RS-232-C接口。它是于1970年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通信的標(biāo)準(zhǔn),它的全稱是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”。
由于本章是講解Linux編程開(kāi)發(fā)的第1章,因此希望讀者更加明確Linux系統(tǒng)調(diào)用和用戶編程接口(API)的概念。在了解了這些之后,會(huì)對(duì)Linux以及Linux的應(yīng)用編程有更深入的理解。
Google 正在開(kāi)發(fā)新操作系統(tǒng) Fuchsia,使用名叫 Zircon 的微內(nèi)核。它是作為一個(gè)開(kāi)源項(xiàng)目開(kāi)發(fā)的,因此外界能跟蹤它的開(kāi)發(fā)進(jìn)度?,F(xiàn)在,Google 發(fā)布了一個(gè)叫“the-book”的文檔頁(yè), 聲明 Fuchsia 不是 Linux,而是一種模塊化的,基于能力的操作系統(tǒng)(A modular, capability-based operating system),然后介紹了新操作系統(tǒng)的子系統(tǒng)和其它信息,包括 Zircon 內(nèi)核、核心、框架、存儲(chǔ)、顯示、媒體、智能、用戶界面、向后兼容等等。Fuchs
在Linux中對(duì)目錄和設(shè)備的操作都等同于文件的操作,因此,大大簡(jiǎn)化了系統(tǒng)對(duì)不同設(shè)備的處理,提高了效率。Linux中的文件主要分為4種:普通文件、目錄文件、鏈接文件和設(shè)備文件。
Fedora是基于RHEL,CentOS,Scientific Linux, 和Oracle Linux的社區(qū)版本。相比RHEL,F(xiàn)edora打包了顯著的更多的軟件包。其中一個(gè)原因是,多樣化的社區(qū)參與Fedora的建設(shè);它不只是一家公司。在這個(gè)過(guò)程中,CentOS用于活動(dòng),演示和實(shí)驗(yàn),因?yàn)樗菍?duì)最終用戶免費(fèi)提供的,并具有比Fedora的一個(gè)更長(zhǎng)的發(fā)布周期(通常每隔半年左右發(fā)布一個(gè)新版本)。
該漏洞在 CVSS 3.0 下的基本得分為 7.8,它能夠讓本地?zé)o權(quán)限的用戶獲取 root 權(quán)限,或者發(fā)動(dòng) DoS 讓系統(tǒng)崩潰。4.10.1 以上的版本都存在這個(gè)問(wèn)題,Linux 方面表示,該漏洞將影響 Linux 服務(wù)器,工作站以及虛擬機(jī),但對(duì)大多數(shù)容器不造成影響。
本章前面幾節(jié)所述的文件及I/O讀寫(xiě)都是基于文件描述符的。這些都是基本的I/O控制,是不帶緩存的。而本節(jié)所要討論的I/O操作都是基于流緩沖的,它是符合ANSI C的標(biāo)準(zhǔn)I/O處理,這里有很多函數(shù)讀者已經(jīng)非常熟悉了(如printf()、scantf()函數(shù)等),因此本節(jié)中僅簡(jiǎn)要介紹最主要的函數(shù)。
通過(guò)編寫(xiě)文件讀寫(xiě)及上鎖的程序,進(jìn)一步熟悉Linux中文件I/O相關(guān)的應(yīng)用開(kāi)發(fā),并且熟練掌握open()、read()、write()、fcntl()等函數(shù)的使用。
本書(shū)在第2章中介紹“ps”的命令時(shí)提到過(guò)管道,當(dāng)時(shí)指出了管道是Linux中一種很重要的通信方式,它是把一個(gè)程序的輸出直接連接到另一個(gè)程序的輸入,這里仍以第2章中的“ps –ef | grep ntp”為例,描述管道的通信過(guò)程,如圖8.2所示
本章首先講解了系統(tǒng)調(diào)用(System Call)、用戶函數(shù)接口(API)和系統(tǒng)命令之間的聯(lián)系和區(qū)別,這也是貫穿本書(shū)的一條主線,本書(shū)就是按照系統(tǒng)命令、用戶函數(shù)接口(API)系統(tǒng)調(diào)用的順序逐層深入講解,希望讀者能有一個(gè)較為深刻的認(rèn)識(shí)。
進(jìn)程的概念首先是在20世紀(jì)60年代初期由MIT的Multics系統(tǒng)和IBM的TSS/360系統(tǒng)引入的。在40多年的發(fā)展中,人們對(duì)進(jìn)程有過(guò)各種各樣的定義?,F(xiàn)列舉較為著名的幾種。
在Linux中創(chuàng)建一個(gè)新進(jìn)程的惟一方法是使用fork()函數(shù)。fork()函數(shù)是Linux中一個(gè)非常重要的函數(shù),和讀者以往遇到的函數(shù)有一些區(qū)別,因?yàn)樗雌饋?lái)執(zhí)行一次卻返回兩個(gè)值。難道一個(gè)函數(shù)真的能返回兩個(gè)值嗎?希望讀者能認(rèn)真地學(xué)習(xí)這一部分的內(nèi)容。
守護(hù)進(jìn)程,也就是通常所說(shuō)的Daemon進(jìn)程,是Linux中的后臺(tái)服務(wù)進(jìn)程。它是一個(gè)生存期較長(zhǎng)的進(jìn)程,通常獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程常常在系統(tǒng)引導(dǎo)載入時(shí)啟動(dòng),在系統(tǒng)關(guān)閉時(shí)終止。
通過(guò)編寫(xiě)多進(jìn)程程序,使讀者熟練掌握f(shuō)ork()、exec()、wait()和waitpid()等函數(shù)的使用,進(jìn)一步理解在Linux中多進(jìn)程編程的步驟。
本章主要介紹進(jìn)程的控制開(kāi)發(fā),首先給出了進(jìn)程的基本概念,Linux下進(jìn)程的基本結(jié)構(gòu)、模式與類型以及Linux進(jìn)程管理。進(jìn)程是Linux中程序運(yùn)行和資源管理的最小單位,對(duì)進(jìn)程的處理也是嵌入式Linux應(yīng)用編程的基礎(chǔ),因此,讀者一定要牢牢掌握。
信號(hào)是UNIX中所使用的進(jìn)程通信的一種最古老的方法。它是在軟件層次上對(duì)中斷機(jī)制的一種模擬,是一種異步通信方式。信號(hào)可以直接進(jìn)行用戶空間進(jìn)程和內(nèi)核進(jìn)程之間的交互,內(nèi)核進(jìn)程也可以利用它來(lái)通知用戶空間進(jìn)程發(fā)生了哪些系統(tǒng)事件。它可以在任何時(shí)候發(fā)給某一進(jìn)程,而無(wú)需知道該進(jìn)程的狀態(tài)。
在多任務(wù)操作系統(tǒng)環(huán)境下,多個(gè)進(jìn)程會(huì)同時(shí)運(yùn)行,并且一些進(jìn)程之間可能存在一定的關(guān)聯(lián)。多個(gè)進(jìn)程可能為了完成同一個(gè)任務(wù)會(huì)相互協(xié)作,這樣形成進(jìn)程之間的同步關(guān)系。而且在不同進(jìn)程之間,為了爭(zhēng)奪有限的系統(tǒng)資源(硬件或軟件資源)會(huì)進(jìn)入競(jìng)爭(zhēng)狀態(tài),這就是進(jìn)程之間的互斥關(guān)系。