1.嵌入式linux系統開發:通過核心提供的服務實現相應的功能。
嵌入式linuxc開發相當於「會看使用說明書」。
2.linux系統空間劃分:使用者空間,核心空間
-使用者空間不能隨便訪問核心空間
-劃分空間的目的:保護核心空間不能被使用者空間隨便訪問
3.系統呼叫:核心提供的安全訪問機制;
硬體中斷,軟體中斷
作用:使使用者空間可以訪問核心空間並獲取服務
4.使用者如何傳送系統呼叫?
——必須傳送檔案呼叫
呼叫系統提供的函式介面
api:使用者程式設計介面
5.檔案描述符——檔案id
動態分配:只有當操作這個檔案時,系統才會給你分配檔案描述符
非負整數:從3編號開始
0,1,2這三個檔案描述符有其他作用
——(creat、read、write、open、lseek、close)
1.creat函式——建立檔案
所需標頭檔案:
#include
//c語言所需標頭檔案
#include
//型別定義
#include
//檔案資訊
#include
基本格式:
int creat (
const
char
*pathname, mode-t mode)
;
函式傳入值:
pathname:檔名
mode-t mode:檔案許可權
一些常用基本許可權:
s_irusr 可讀
s_iwusr可寫
s_ixusr 可執行
s_irwxu 可讀可寫可執行
當然也可以直接用上 0655 0表示8進製,6表示當前檔案可讀可寫,5表示其它檔案可讀可執行(r 可讀,w可寫,x可執行,r=4,w=2,x=1)
乙個函式的基本組成為函式名,形參,返回值
函式返回值:
成功:返回檔案描述符
失敗:-1
所以呼叫完乙個函式要檢查是否成功
檢查錯誤使用函式perror(自動換行且列印系統的錯誤資訊)
例:建立名為hello.txt的檔案,並檢錯。
#include
#include
#include
#include
intmain()
return
0;
2.open函式——開啟檔案
所需標頭檔案:
#include
//c語言所需標頭檔案
#include
//型別定義
#include
//檔案資訊
#include
基本格式:
int
open
(const
char pathname,
int flags)
;
int
open
(const
char pathname ,
int flags,mode-t mode)
;
函式傳入值:
pathname:被開啟檔名(可包括路徑名,預設時為當前目錄)
flags:檔案開啟的方式,引數可以通過「|」(或)組合構成,但前3個引數不能互相重合。
mode _t mode:被開啟檔案的訪問許可權,為8進製表示法(呼叫o_creat才需要)。
注意:可以用open代替creat操作,即檔案開啟的方式中加上o_creat
例:將上例改為
int fd =
open
("hello.txt"
0644
);
3.write 函式——將內容寫入檔案
所需標頭檔案:
#include
基本格式:
int
write
(int fd,
void
*buf,size_t length)
函式傳入值:
fd:檔案描述符
buf:指定儲存器寫入資料的緩衝區
length:指定讀出的位元組數
即將buf中length長的內容寫入fd中
可以通過函式:
memset(buffer,0,sizeof(buffer))
來清空緩衝區buffer
例:
char buffer[
1024]=
"hello world"
;int w_len =
write
(fd, buffer,
strlen
(buffer)
);
4.read函式——讀取檔案內容至快取區
所需標頭檔案:
#include
基本格式:
read
(int fd,
void
*buf, size-t count)
函式傳入值:
fd:檔案描述符
buf:指定儲存器寫入資料的緩衝區
count:指定讀出的位元組數
即將buf中length長的內容寫入fd中,和write的操作相反
例:
int r_len =
read
(fd, buffer,
sizeof
(buffer)
);
5.lseek函式—— 控制讀寫位置
所需標頭檔案:
#include
#include
基本格式:
int
lseek
(int fd,off_t offset,
int whence)
函式傳入值:
fd:檔案描述符
offset:偏移量,每一讀寫操作所需要移動的距離,單位是位元組的數量,可正可負(向前移,向後移)
whence:當前位置的基點:
一些常用基本許可權:
seek_set:當前位置為檔案開頭,新位置為偏移量的大小
seek_cur:當前位置為檔案指標位置,新位置為當前位置加上偏移量
seek_end:當前位置為檔案的結尾,新位置為檔案的大小加上偏移量大小
例:
lseek
(fd,0,
seek_set);
//指向這行開頭
lseek
(fd,0,
seek_end);
//計算檔案內容長度
6.close函式——關閉檔案
基本格式:
close
(fd)
;
用在程式設計結尾處
例:
int fd =
open
("hello2.txt"
0644);
close
(fd)
;
linux c程式設計 非阻塞I O
通常來說,從普通檔案讀資料,無論你是採用 fscanf,fgets 也好,read 也好,一定會在有限的時間內返回。但是如果你從裝置,比如終端 標準輸入裝置 讀資料,只要沒有遇到換行符 n read 一定會 堵 在那而不返回。還有比如從網路讀資料,如果網路一直沒有資料到來,read 函式也會一直堵在...
linux C 開發學習
1.段錯誤 當函式執行一次的時候不報錯,當函式在乙個迴圈中迭代呼叫的時候報段錯誤。錯誤原因。int weight 0 fprintf ferr,s t f t s n word,weight,hzpy 當此條語句改為fprintf ferr,s t d t s n word,weight,hzpy ...
Linux C 庫打樁技術
3.2.編譯命令 3.3.運 況和執行命令 3.4.說明 4.編譯時打樁 4.2.編譯命令和執行命令 4.3.運 況 4.4.說明 5.執行時打樁 5.2.編譯命令和執行命令 5.3.運 況 5.4.說明 6.參考資料 庫打樁技術,可以截獲對共享庫函式的呼叫。應用上可以如可以控制函式呼叫的輸入輸出值...