序言Linux基本知識回顧 Linux內核安全管理機制 根文件系統rootfs Linux根目錄下文件結構 Linux文件類型標準IO 標準IO操作數據流分析 文件 打開、關閉 fopen( ) fclose( ) 文件 字元讀寫 fgetc( ) fputc( ) 文件 行讀寫 fgets( ) ...
序言
Linux基本知識回顧
Linux內核安全管理機制
根文件系統rootfs
Linux根目錄下文件結構
Linux文件類型
標準IO
標準IO操作數據流分析
文件 打開、關閉
fopen( )
fclose( )
文件 字元讀寫
fgetc( )
fputc( )
文件 行讀寫
fgets( )
fputs( )
文件 數據快讀寫
fread( )
fwrite( )
文件 當前位置偏移量 獲取 設置
ftell( )
fseek( )
rewind( )
文件 狀態判斷
feof( )、ferror( )
標準輸入設備 讀取、輸出
getchar( )
putchar( )
時間函數
time( )
localtime( )
刷新緩衝區
fflush( )
系統IO
打開關閉
open( )
close( )
數據讀寫
read( )
write( )
文件位置偏移量
lseek( )
記憶體映射
mmap( )
實踐開發
LCD屏幕顯像原理
驅動架構
軟體層
LCD內核源碼
文件控制
ioctl( ) 文件控制
mmap( )記憶體映射
munmap()解除映射
屏幕顯示
BMP圖像的儲存
其它函數
sscanf( )
描述
聲明
參數
返回值
strcmp( )
remove()
getchar()
strftime()
atoi()
參考文檔
序言
儘可能壓縮筆記,核心在於構建核心知識單元網路。
Linux基本知識回顧
Linux內核安全管理機制
根文件系統rootfs
Linux根目錄下文件結構
Linux文件類型
-(regular) 普通文件
d(directory) 目錄文件
p(pipe) 管道文件
s(socket) 套接字文件
l(link) 鏈接文件
c(character) 字元設備文件
b(block) 塊設備文件
標準IO
標準IO操作數據流分析
文件操作介面
文件 打開、關閉
fopen( )
加b是以二進位處理
fclose( )
文件 字元讀寫
fgetc( )
fputc( )
文件 行讀寫
fgets( )
fputs( )
文件 數據快讀寫
fread( )
fwrite( )
字元串要用strlen函數,sizeof(“字元串”)得到的是地址一個字長。
文件 當前位置偏移量 獲取 設置
ftell( )
相較於文件開頭的位元組數
fseek( )
rewind( )
rewind(fp)相等於fseek(fp, 0L, SEEK_SE);
文件 狀態判斷
feof( )、ferror( )
標準輸入設備 讀取、輸出
getchar( )
getchar( )預設從標準輸入設備讀取一個字元。
putchar( )
putchar( )預設從標準輸出設備輸出一個字元。
時間函數
time( )
獲取1970至今的秒數
localtime( )
轉換timer的值為tm結構 後的值
刷新緩衝區
fflush( )
刷新全緩衝
系統IO
api:應用程式編程介面
sdk:軟體開發工具包
標準I/O可以看成是在系統I/O的基礎上封裝了緩衝機制。
文件描述符是一個小的非負整數。
打開關閉
open( )
close( )
數據讀寫
read( )
write( )
文件位置偏移量
lseek( )
記憶體映射
mmap( )
實踐開發
LCD屏幕顯像原理
偏光片、彩色濾光片
像素數量、
像素色深(位深度、色域) : bit-->4Bytes-->ARGB
驅動架構
Framebuffer驅動子系統
粵嵌屏幕解析度 800*480。
ll: c或b開頭的都是硬體設備驅動提供的文件
設備文件在/dev/fb0
軟體層
LCD內核源碼
要看內核源碼
Linux最多支持32塊(編號0~31)LCD屏幕.
文件控制
ioctl( ) 文件控制
該函數是一個專用於設備輸入輸出操作的系統調用,該調用傳入一個跟設備有關的請求碼,系統調用的功能完全取決於請求碼。
ioctl(文件描述符,請求碼,某類型指針) 可以獲取或設置硬體設備的參數
#include <sys/ioctl.h>
int ioctl(int fd, unsigned long request, ...);
下麵我們解釋各個參數的含義。
1)fd是文件描述符。當我們的設備作為特殊文件被open()函數打開後,會返回一個文件描述符,通過操作這個文件描述符達到操作設備文件的目的。
2)request是命令碼,應用程式通過下發命令碼來控制驅動程式完成對應操作。
3)第三個參數“…”是可變參數arg,一些情況下應用程式需要向驅動程式傳參,參數就通過ag來傳遞。ioctl函數中的“…”只能傳遞一個參數,但內核不會檢查這個參數的類型。那麼,就有兩種傳參方式:只傳一個整數,傳遞一個指針。
如果ioctl執行成功,它的返回值就是驅動程式中ioctl介面給的返回值,驅動程式可以通過返回值向用戶程式傳參。但驅動程式最好返回一個非負數,因為用戶程式中的ioctl運行失敗時一定會返回-1並設置全局變數errorno。
errono不同的值代表的含義如下:
EBADF:fd是一個無效的文件描述符。
EFAULT:在arg是指針的前提下,argp指向一個不可訪問的記憶體空間。
EINVAL:request或argp是無效的。
ENOTTY:fd沒有關聯到一個字元特殊設備,或該request不適用於文件描述符fd引用的對象類型。(說人話就是fd沒有指向一個字元設備,或fd指向的文件不支持ioctl操作)
因此,在用戶空間調用ioctl時,可以使用如下的錯誤判斷處理。包括的兩個頭文件,string.h聲明瞭strerror函數,errno.h定義了錯誤碼errno。
#include <string.h>
#include <errno.h>
int ret;
ret = ioctl(fd, MYCMD);
if (ret == -1)
printf("ioctl: %s\n", strerror(errno));
mmap( )記憶體映射
munmap()解除映射
#include <sys/mman.h>
int munmap(void *addr, size_t length);
munmap()系統調用解除指定地址範圍內的映射,參數 addr 指定待解除映射地址範圍的起始地址,它必須是系統頁大小的整數倍;參數 length 是一個非負整數,指定了待解除映射區域的大小(位元組數),被解除映射的區域對應的大小也必須是系統頁大小的整數倍,即使參數 length 並不等於系統頁大小的整數倍,與 mmap()函數相似。
需要註意的是,當進程終止時也會自動解除映射(如果程式中沒有顯式調用 munmap()),但調用 close() 關閉文件時並不會解除映射。
通常將參數 addr 設置為 mmap()函數的返回值,將參數 length 設置為 mmap()函數的參數 length,表示解除整個由 mmap()函數所創建的映射。
屏幕顯示
BMP圖像的儲存
BMP圖像記憶體採用小端存儲.
其它函數
sscanf( )
描述
C 庫函數 int sscanf(const char *str, const char *format, ...) 從字元串讀取格式化輸入。
聲明
下麵是 sscanf() 函數的聲明。
int sscanf(const char *str, const char *format, ...)
參數
- str -- 這是 C 字元串,是函數檢索數據的源。
- format -- 這是 C 字元串,包含了以下各項中的一個或多個:空格字元、非空格字元 和 format 說明符。
format 說明符形式為 [=%*[modifiers]type=],具體講解如下:
參數 | 描述 |
---|---|
* | 這是一個可選的星號,表示數據是從流 stream 中讀取的,但是可以被忽視,即它不存儲在對應的參數中。 |
width | 這指定了在當前讀取操作中讀取的最大字元數。 |
modifiers | 為對應的附加參數所指向的數據指定一個不同於整型(針對 d、i 和 n)、無符號整型(針對 o、u 和 x)或浮點型(針對 e、f 和 g)的大小: h :短整型(針對 d、i 和 n),或無符號短整型(針對 o、u 和 x) l :長整型(針對 d、i 和 n),或無符號長整型(針對 o、u 和 x),或雙精度型(針對 e、f 和 g) L :長雙精度型(針對 e、f 和 g) |
type | 一個字元,指定了要被讀取的數據類型以及數據讀取方式。具體參見下一個表格。 |
sscanf 類型說明符:
類型 | 合格的輸入 | 參數的類型 |
---|---|---|
c | 單個字元:讀取下一個字元。如果指定了一個不為 1 的寬度 width,函數會讀取 width 個字元,並通過參數傳遞,把它們存儲在數組中連續位置。在末尾不會追加空字元。 | char * |
d | 十進位整數:數字前面的 + 或 - 號是可選的。 | int * |
e,E,f,g,G | 浮點數:包含了一個小數點、一個可選的前置符號 + 或 -、一個可選的後置字元 e 或 E,以及一個十進位數字。兩個有效的實例 -732.103 和 7.12e4 | float * |
o | 八進位整數。 | int * |
s | 字元串。這將讀取連續字元,直到遇到一個空格字元(空格字元可以是空白、換行和製表符)。 | char * |
u | 無符號的十進位整數。 | unsigned int * |
x,X | 十六進位整數。 | int * |
- 附加參數
- -- 這個函數接受一系列的指針作為附加參數,每一個指針都指向一個對象,對象類型由 format 字元串中相應的 % 標簽指定,參數與 % 標簽的順序相同。
- 針對檢索數據的 format 字元串中的每個 format 說明符,應指定一個附加參數。如果您想要把 sscanf 操作的結果存儲在一個普通的變數中,您應該在標識符前放置引用運算符(&),例如:
- int n;
sscanf (str,"%d",&n);
返回值
如果成功,該函數返回成功匹配和賦值的個數。如果到達文件末尾或發生讀錯誤,則返回 EOF。
strcmp( )
C 庫函數 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字元串和 str2 所指向的字元串進行比較。
聲明
下麵是 strcmp() 函數的聲明。
int strcmp(const char *str1, const char *str2)
參數
- str1 -- 要進行比較的第一個字元串。
- str2 -- 要進行比較的第二個字元串。
返回值
該函數返回值如下:
- 如果返回值小於 0,則表示 str1 小於 str2。
- 如果返回值大於 0,則表示 str1 大於 str2。
- 如果返回值等於 0,則表示 str1 等於 str2。
remove()
描述
C 庫函數 int remove(const char *filename) 刪除給定的文件名 filename,以便它不再被訪問。
聲明
下麵是 remove() 函數的聲明。
int remove(const char *filename)
參數
- filename -- 這是 C 字元串,包含了要被刪除的文件名稱。
返回值
如果成功,則返回零。如果錯誤,則返回 -1,並設置 errno。
getchar()
描述
C 庫函數 int getchar(void) 從標準輸入 stdin 獲取一個字元(一個無符號字元)。這等同於 getc 帶有 stdin 作為參數。
聲明
下麵是 getchar() 函數的聲明。
int getchar(void)
參數
- NA
返回值
該函數以無符號 char 強制轉換為 int 的形式返回讀取的字元,如果到達文件末尾或發生讀錯誤,則返回 EOF。
strftime()
描述
C 庫函數 size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) 根據 format 中定義的格式化規則,格式化結構 timeptr 表示的時間,並把它存儲在 str 中。
聲明
下麵是 strftime() 函數的聲明。
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
參數
- str -- 這是指向目標數組的指針,用來複制產生的 C 字元串。
- maxsize -- 這是被覆制到 str 的最大字元數。
- format -- 這是 C 字元串,包含了普通字元和特殊格式說明符的任何組合。這些格式說明符由函數替換為表示 tm 中所指定時間的相對應值。格式說明符是:
說明符 | 替換為 | 實例 |
---|---|---|
%a | 縮寫的星期幾名稱 | Sun |
%A | 完整的星期幾名稱 | Sunday |
%b | 縮寫的月份名稱 | Mar |
%B | 完整的月份名稱 | March |
%c | 日期和時間表示法 | Sun Aug 19 02:56:02 2012 |
%d | 一月中的第幾天(01-31) | 19 |
%H | 24 小時格式的小時(00-23) | 14 |
%I | 12 小時格式的小時(01-12) | 05 |
%j | 一年中的第幾天(001-366) | 231 |
%m | 十進位數表示的月份(01-12) | 08 |
%M | 分(00-59) | 55 |
%p | AM 或 PM 名稱 | PM |
%S | 秒(00-61) | 02 |
%U | 一年中的第幾周,以第一個星期日作為第一周的第一天(00-53) | 33 |
%w | 十進位數表示的星期幾,星期日表示為 0(0-6) | 4 |
%W | 一年中的第幾周,以第一個星期一作為第一周的第一天(00-53) | 34 |
%x | 日期表示法 | 08/19/12 |
%X | 時間表示法 | 02:50:06 |
%y | 年份,最後兩個數字(00-99) | 01 |
%Y | 年份 | 2012 |
%Z | 時區的名稱或縮寫 | CDT |
%% | 一個 % 符號 | % |
- timeptr
-- 這是指向 tm 結構的指針,該結構包含了一個被分解為以下各部分的日曆時間:
struct tm {
int tm_sec; /* 秒,範圍從 0 到 59 */
int tm_min; /* 分,範圍從 0 到 59 */
int tm_hour; /* 小時,範圍從 0 到 23 */
int tm_mday; /* 一月中的第幾天,範圍從 1 到 31 */
int tm_mon; /* 月份,範圍從 0 到 11 */
int tm_year; /* 自 1900 起的年數 */
int tm_wday; /* 一周中的第幾天,範圍從 0 到 6 */
int tm_yday; /* 一年中的第幾天,範圍從 0 到 365 */
int tm_isdst; /* 夏令時 */
};
返回值
如果產生的 C 字元串小於 size 個字元(包括空結束字元),則會返回覆制到 str 中的字元總數(不包括空結束字元),否則返回零。
atoi()
描述
C 庫函數 int atoi(const char *str) 把參數 str 所指向的字元串轉換為一個整數(類型為 int 型)。
聲明
下麵是 atoi() 函數的聲明。
int atoi(const char *str)
參數
- str -- 要轉換為整數的字元串。
返回值
該函數返迴轉換後的長整數,如果沒有執行有效的轉換,則返回零。
參考文檔
本文來自博客園,作者:舟清颺,轉載請註明原文鏈接:https://www.cnblogs.com/zqingyang/p/18218543