《嵌入式Linux開發(fā)實踐教程 第2版》 課件 項目6 嵌入式Linux C 開發(fā)_第1頁
《嵌入式Linux開發(fā)實踐教程 第2版》 課件 項目6 嵌入式Linux C 開發(fā)_第2頁
《嵌入式Linux開發(fā)實踐教程 第2版》 課件 項目6 嵌入式Linux C 開發(fā)_第3頁
《嵌入式Linux開發(fā)實踐教程 第2版》 課件 項目6 嵌入式Linux C 開發(fā)_第4頁
《嵌入式Linux開發(fā)實踐教程 第2版》 課件 項目6 嵌入式Linux C 開發(fā)_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

管理Glibc庫文件物聯網學院平震宇GlibcGlibc(GNUCLibrary)是GNU發(fā)布的C語言標準庫,即C語言運行庫。Glibc是GNU工具鏈的關鍵組件用Glibc

做為系統(tǒng)的C語言運行庫,是Linux演進的一個重要里程碑

Glibc主要包含以下內容動態(tài)庫與靜態(tài)庫函數庫頭文件函數庫說明文件字集轉換模組與區(qū)域化資料庫時區(qū)資料庫Glibc主要包含以下內容動態(tài)庫與靜態(tài)庫 /lib與/usr/lib函數庫頭文件

/usr/include函數庫說明文件

/usr/man

/usr/share/manGlibc主要包含以下內容字集轉換模組與區(qū)域化資料庫/usr/lib/gconv/內含大量的字集轉換模塊,各種字集及編碼方式與系統(tǒng)的基底字集之間的轉換

/usr/lib/locale,內含以系統(tǒng)基底字集寫成的區(qū)域化資料庫(locale)

/usr/share/locale/,內含可跨平臺使用的區(qū)域化資料,主要是各應用程式的信息翻譯部分/usr/share/i18n/,其內容是各區(qū)域化資料庫的原始碼,以及系統(tǒng)支援的內碼對應表等時區(qū)資料庫

/usr/share/zoneinfo目錄下包含世界各地時區(qū)與格林威治時間的轉換資料GlibcGlibc是Linux平臺C程序運行的基礎,提供一組頭文件和一組庫文件,最基本、最常用的C標準庫函數和系統(tǒng)函數在libc.so庫文件中。數學計算的C程序

libm.so多線程的C程序

libpthread.so

GlibcGlibc的庫有靜態(tài)庫和動態(tài)庫兩個版本,都位于/lib和/usr/lib目錄中,靜態(tài)庫的文件以.a為后綴名,動態(tài)庫以.so為后綴名。

lddldd命令用于判斷一個程序必須使用的動態(tài)庫。參數說明:

--version打印ldd的版本號

-v--verbose打印所有信息,例如包括符號的版本信息

-d--data-relocs執(zhí)行符號重部署,并報告缺少的目標對象(只對ELF格式適用)

-r--function-relocs對目標對象和函數執(zhí)行重新部署,并報告缺少的目標對象和函數(只對ELF格式適用)

ldconfigldconfig是一個動態(tài)鏈接庫管理命令,其目的為了讓動態(tài)鏈接庫為系統(tǒng)所共享。ldconfig的主要用途:默認搜尋/lilb和/usr/lib,以及配置文件/etc/ld.so.conf內所列的目錄下的庫文件。搜索出可共享的動態(tài)鏈接庫,庫文件的格式為:lib***.so.**,進而創(chuàng)建出動態(tài)裝入程序(ld.so)所需的連接和緩存文件。緩存文件默認為/etc/ld.so.cache,該文件保存已排好序的動態(tài)鏈接庫名字列表。ldconfig通常在系統(tǒng)啟動時運行,而當用戶安裝了一個新的動態(tài)鏈接庫時,就需要手工運行這個命令。

GCC編譯器動態(tài)庫的搜索路徑搜索的先后順序

編譯目標代碼時指定的動態(tài)庫搜索路徑;環(huán)境變量

LD_LIBRARY_PATH

指定的動態(tài)庫搜索路徑;配置文件

/etc/ld.so.conf

中指定的動態(tài)庫搜索路徑;默認的動態(tài)庫搜索路徑

/lib

;默認的動態(tài)庫搜索路徑

/usr/lib

文件I/O編程物聯網學院平震宇文件描述符文件描述符是一個非負的整數,它是一個索引值,并指向在內核中每個進程打開文件的記錄表。當打開一個現存文件或創(chuàng)建一個新文件時,內核就向進程返回一個文件描述符;當需要讀寫文件時,也需要把文件描述符作為參數傳遞給相應的函數。打開文件Flag標記O_RDONLY就表示以只讀方式打開O_WRONLY表示以只寫方式打開O_RDWR表示以可讀可寫方式打開當打開已經存在并且內部有內容的文件時O_APPEND標志:以添加方式打開文件,在打開文件的同時,文件指針指向文件的末尾,即將寫入的數據添加到文件的末尾O_TRUNC標志:若文件已經存在,那么會刪除文件中的全部原有數據,并且設置文件大小為0文件讀寫控制文件讀寫位置lseek參數fd:已經打開的文件描述符。offset:偏移量,每一讀寫操作所需要移動的距離,單位是字節(jié),可正可負(向前移,向后移)。whence:當前位置的基點。SEEK_SET:當前位置為文件的開頭,新位置為偏移量的大小SEEK_CUR:當前位置為文件指針的位置,新位置為當前位置加上偏移量SEEK_END:當前位置為文件的結尾,新位置為文件的大小lseeklseek文件開始文件結束fcntl函數fcntl參數fd:已經打開的文件描述符。cmd

:不同的命令struct

flock

*lock:設置記錄鎖的具體狀態(tài)

fcntl參數F_DUPFD與dup函數功能一樣,復制由fd指向的文件描述符,調用成功后返回新的文件描述符,與舊的文件描述符共同指向同一個文件。F_GETFD讀取文件描述符close-on-exec標志F_SETFD將文件描述符close-on-exec標志設置為第三個參數arg的最后一位F_GETFL獲取文件打開方式的標志,標志值含義與open調用一致F_SETF設置文件打開方式為arg指定方式fcntl參數F_SETLK此時fcntl函數用來設置或釋放鎖。當short_l_type為F_RDLCK為讀鎖,F_WDLCK為寫鎖,F_UNLCK為解鎖。如果鎖被其他進程占用,則返回-1;這種情況設的鎖遇到鎖被其他進程占用時,會立刻停止進程。F_SETLKW此時也是給文件上鎖,不同于F_SETLK的是,該上鎖是阻塞方式。當希望設置的鎖因為其他鎖而被阻止設置時,該命令會等待相沖突的鎖被釋放。F_GETLK第3個參數lock指向一個希望設置的鎖的屬性結構,如果鎖能被設置,該命令并不真的設置鎖,而是只修改lock的l_type為F_UNLCK,然后返回該結構體。如果存在一個或多個鎖與希望設置的鎖相互沖突,則fcntl返回其中的一個鎖的flock結構。structflock標準I/O編程物聯網學院平震宇文件I/O與標準I/O文件I/O:文件I/O稱之為不帶緩存的IO(unbufferedI/O)。標準I/O:基于流緩沖的,提供了三種類型的緩存。全緩存:當填滿標準I/O緩存后才進行實際的I/O操作。

行緩存:當輸入或輸出中遇到新行符時,標準I/O庫執(zhí)行I/O操作。

不帶緩存:標準出錯stderr。文件I/O與標準I/O

標準I/O文件I/O打開fopen,freopen,fdopenopen關閉fcloseclose讀getc,fgetc,getchar

fgets,gets

freadread寫putc,fputc,putchar

fputs,puts,

fwritewrite打開文件Mode取值標志名說

明r或rb打開只讀文件,該文件必須存在r+或r+b打開可讀寫的文件,該文件必須存在W或wb打開只寫文件。若文件不存在則建立該文件w+或w+b打開可讀寫文件。若文件不存在則建立該文件a或ab以附加的方式打開只寫文件。a+或a+b以附加方式打開可讀寫的文件。文件讀寫文件狀態(tài)structstat網絡通訊編程物聯網學院平震宇TCP/IP協議模型TCP/IP協議模型TCP/IP協議模型Socket套接字

socket起源于Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open–>讀寫write/read–>關閉close”模式來操作。socket就是該模式的一個實現,socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉).Socket套接字

流式套接字socket(SOCK_STREAM)數據報套接字socket(SOCK_DGRAM)原始套接字socket客戶/服務模式socket()建立一個socket連接bind()用于將本地IP地址綁定到端口號sockaddr獲取本地IP地址listen()讓Socket偵聽傳入的連接嘗試,并指定偵聽隊列容量accept()接收連接并返回一個新的socketconnect()初始化與另一個Socket的連接send()和recv()發(fā)送和接收數據網絡編程實例當用戶從客戶端輸入“HelloServer”傳送到服務器端,服務器端發(fā)送“Hello,Client”到客戶端;如果從客戶端輸入“HelloABC”,傳送到服務器端,服務器端發(fā)送“Helloabc”到客戶端;如果從客戶端輸入“exit”,傳送到服務器端,服務器端程序退出,不向客戶端送回任何信息。網絡編程實例串口通訊編程物聯網學院平震宇并行通信與串行通信并行通信:是指利用多條數據傳輸線將數據的各位同時傳送優(yōu)點:傳輸速度快缺點:數據有多少位就需要多少根傳輸線,所以在位數多、傳輸距離遠時,通信線路復雜,成本高。串行通信:是指利用一條傳輸線將數據一位位地順序傳送。優(yōu)點:這種通信方式的數據傳輸只需一、兩根傳輸線,通信線路簡單,成本低,特別適用于遠程通信缺點:傳輸速度較慢。多用于傳輸距離長、低速度的場合。串口簡介

RS-232-C:也稱標準串口,是目前最常用的一種串行通訊接口RS-422:為改進RS-232通信距離短、速率低的缺點RS-485:為擴展應用范圍,EIA又于1983年在RS-422基礎上制定了RS-485標準,增加了多點、雙向通信能力USB:通用串行總線,用于規(guī)范電腦與外部設備的連接和通訊。是應用在PC領域的接口技術。RJ-45:RJ-45接口,適用于由雙絞線構建的網絡,以太網集線器都會提供這種端口串行接口簡稱串口,也稱串行通信接口(通常指COM接口),是采用串行通信方式的擴展接口。9芯D型插座(DB9)針腳名稱全名3TDTransmitData2RDReceiveData7RTSRequestToSend8CTSClearToSend6DSRDataSetReady4DTRDataTerminalReady1CDDataCarrierDetect9RIRingIndicator5-SignalGround串口文件在linux中,針對所有的周邊設備都提供了設備文件供用戶訪問,所以如果要訪問串口,只要打開相關的設備文件即可。在Linux下串口文件是位于/dev下的COM1串口一為/dev/ttyS0COM2串口二為/dev/ttyS1串口設置在使用串口之前必須設置相關配置,包括:波特率、數據位、校驗位、停止位等c_cflag常量名稱

設置波特率設置數據位設置奇偶校驗位設置停止位

激活配置

打開串口fd

溫馨提示

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

評論

0/150

提交評論