Linux C開發 I O技術

2021-10-23 03:39:19 字數 3839 閱讀 7505

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.參考資料 庫打樁技術,可以截獲對共享庫函式的呼叫。應用上可以如可以控制函式呼叫的輸入輸出值...