ARM的嵌入式Linux移植體驗之應用例項

2021-08-31 08:08:20 字數 1739 閱讀 3638

linux的檔案操作api涉及到建立、開啟、讀寫和關閉檔案。

建立int creat(const char *filename, mode_t mode);

引數mode指定新建檔案的訪問許可權,它同umask一起決定檔案的最終許可權(mode&umask),其中umask代表了檔案在建立時需要去掉的一些訪問許可權。umask可通過系統呼叫umask()來改變:

int umask(int newmask);

該呼叫將umask設定為newmask,然後返回舊的umask,它只影響讀、寫和執行許可權。

開啟int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

讀寫在檔案開啟以後,我們才可對檔案進行讀寫了,linux中提供檔案讀寫的系統呼叫是read、write函式:

int read(int fd, const void *buf, size_t length);

int write(int fd, const void *buf, size_t length);

其中引數buf為指向緩衝區的指標,length為緩衝區的大小(以位元組為單位)。函式read()實現從檔案描述符fd所指定的檔案中讀取length個位元組到buf所指向的緩衝區中,返回值為實際讀取的位元組數。函式write實現將把length個位元組從buf指向的緩衝區中寫到檔案描述符fd所指向的檔案中,返回值為實際寫入的位元組數。

以o_creat為標誌的open實際上實現了檔案建立的功能,因此,下面的函式等同creat()函式:

int open(pathname, o_creat | o_wronly | o_trunc, mode);

定位對於隨機檔案,我們可以隨機的指定位置讀寫,使用如下函式進行定位:

int lseek(int fd, offset_t offset, int whence);

lseek()將檔案讀寫指標相對whence移動offset個位元組。操作成功時,返回檔案指標相對於檔案頭的位置。引數whence可使用下述值:

seek_set:相對檔案開頭

seek_cur:相對檔案讀寫指標的當前位置

seek_end:相對檔案末尾

offset可取負值,例如下述呼叫可將檔案指標相對當前位置向前移動5個位元組:

lseek(fd, -5, seek_cur);

由於lseek函式的返回值為檔案指標相對於檔案頭的位置,因此下列呼叫的返回值就是檔案的長度:

lseek(fd, 0, seek_end);

關閉只要呼叫close就可以了,其中fd是我們要關閉的檔案描述符:

int close(int fd);

下面我們來編寫乙個應用程式,在當前目錄下建立使用者可讀寫檔案"example.txt",在其中寫入"hello world",關閉檔案,再次開啟它,讀取其中的內容並輸出在螢幕上:

#include

#include

#include

#include

#define length 100

main()

fd = open("hello.txt", o_rdwr);

len = read(fd, str, length); /* 讀取檔案內容 */

str[len] = '\0';

printf("%s\n", str);

close(fd);

}

libcurl移植到嵌入式ARM

curl 庫的主要功能是用不同的協議連線不同的伺服器,也就是相當封裝了的 socket 的協議庫,libcurl 當前支援 等常用協議,libcurl 也支援https 證書授權,是網路程式開發的一把利器。unzip curl curl 7 50 0.zip 也可以把目錄名字修改為libcurl m...

向linux嵌入式ARM板移植dropbear

最近出於專案需要,不再使用telnet協議來遠端操控嵌入式linux開發機,而需要使用有一定安全要求的ssh協議,做記錄以備將來回顧。2016 8 16 linux系統中常用的ssh軟體是openssh,由於openssh略顯龐大,後選擇輕量級的dropbear替換openssh。dropbear實...

ARM嵌入式Linux移植體驗裝置驅動(續1)

裝置驅動程式是作業系統核心和機器硬體之間的介面,它為應用程式遮蔽硬體的細節,一般來說,linux的設 備驅動程式需要完成如下功能 裝置初始化 釋放 提供各類裝置服務 負責核心和裝置之間的資料交換 檢測和處理裝置工作過程中出現的錯誤。linux下的裝置驅動程式被組織為一組完成不同任務的函式的集合,通過...