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下的裝置驅動程式被組織為一組完成不同任務的函式的集合,通過...