C語言檔案IO(嵌入式系統課程學習記錄3)

2021-10-04 20:17:03 字數 3973 閱讀 2079

基於檔案io的檔案拷貝程式

標準io

fclose函式

fread函式

fwrite函式

基於標準io的檔案拷貝程式

這次學的主要是linux系統下c語言的io程式設計

open函式的定義如下:

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

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

其中返回值為檔案描述符,如果開啟失敗則返回-1

第乙個引數pathname是字串,輸入開啟檔案的路徑

第二個引數flags是標誌位,多個組合用 | 隔開

第三個引數mode,在用creat標誌的時候要寫上許可權

感覺上能用標誌的如下:

標誌含義

o_rdonly

唯讀o_wronly

只寫o_rdwr

讀寫寫入時在後面追加

o_creat

若不存在則建立

······

close函式的定義如下:

int close(int fd);
使用方法很簡單,返回值0表示成功,返回-1表示失敗。

fd是之前open()的返回值,表示關閉開啟的某檔案。

和open()成對使用

定義:

ssize_t read(int filedes, void *buf, size_t nbytes);
返回值表示讀到的大小,如果是-1表示失敗

第乙個引數filedes是open返回的檔案描述符

第二個引數表示要讀到的快取區

第三個引數表示讀取的長度

定義:

ssize_t write(int filedes, const void *buf, size_t nbytes);
與read類似:

返回值表示寫入的大小,-1表示失敗

第乙個引數是open返回的檔案描述符

第二個引數是寫入的快取區

第三個是寫入的位元組數

#include

"stdio.h"

#include

"unistd.h"

#include

"fcntl.h"

#include

"string.h"

intmain

(int argc,

char

*ar**)

;int rd_ret =0;

if(argc <3)

rd_fd =

open

(ar**[1]

,o_rdonly);if

(rd_fd <0)

printf

("open src file %s success, rd_fd = %d\n"

,ar**[1]

,rd_fd)

; wr_fd =

open

(ar**[2]

,o_wronly|o_creat,

0600);

//不存在就建立,許可權0600

if(wr_fd <0)

printf

("open dst file %s success, wr_fd = %d\n"

,ar**[2]

,wr_fd)

;while(1

)write

(wr_fd,read_buf,rd_ret)

;memset

(read_buf,0,

128);}

write

(wr_fd,read_buf,rd_ret)

;close

(rd_fd)

;close

(wr_fd)

;return0;

}

標準io是"stdio.h"定義的一系列函式,也有關於檔案的io函式,優勢是移植性比檔案io好。

fopen()與open()類似

file * fopen(const char * path,const char * mode);
返回引數是file指標,null表示失敗

第乙個引數path是檔名

第二個引數mode是讀寫規則

mode含義r

唯讀w只寫(覆蓋),不存在就建立

w+讀寫(覆蓋),不存在就建立

a只寫(追加),不存在就建立

a+讀寫(追加),不存在就建立

(b)對應的二進位制檔案,例如wb+表示二進位制讀寫覆蓋

······

類似close()

int fclose(file *stream)
返回值0表示成功,-1表示失敗

引數stream是開啟的file指標

類似read(),但是順序有變

size_t fread(void *buffer, size_t size, size_t count, file *stream);
返回值是讀取的長度,-1表示失敗

buffer:是讀取到的快取位置,資料去向

size:是讀取的大小

count:表示資料個數,一般用1

stream:是fopen()返回的指標

類似write(),順序有變

size_t fwrite(const void* buffer, size_t size, size_t count, file* stream);
其中的注釋是和上乙個程式的差異

#include

"stdio.h"

#include

"unistd.h"

#include

"fcntl.h"

#include

"string.h"

intmain

(int argc,

char

*ar**)

;int rd_ret =0;

if(argc <3)

//rd_fd = open(ar**[1],o_rdonly);

rd_fd =

fopen

(ar**[1]

,"r");

//if(rd_fd < 0)

printf

("open src file %s success, rd_fd = %d\n"

,ar**[1]

,rd_fd)

;//wr_fd = open(ar**[2],o_wronly|o_creat,0600);

wr_fd =

fopen

(ar**[2]

,"w");

//if(wr_fd < 0)

printf

("open dst file %s success, wr_fd = %d\n"

,ar**[2]

,wr_fd)

;while(1

)//write(wr_fd,read_buf,rd_ret);

fwrite

(read_buf,

1,rd_ret,wr_fd)

;memset

(read_buf,0,

128);}

//write(wr_fd,read_buf,rd_ret);

fwrite

(read_buf,

1,rd_ret,wr_fd)

;fclose

(rd_fd)

;fclose

(wr_fd)

;close

(rd_fd)

;close

(wr_fd)

;return0;

}

暫時就這樣

嵌入式學習(二) 嵌入式系統C 語言

1 從 cpu 復位時的指定位址開始執行 2 跳轉至彙編 startup 處執行 3 跳轉至使用者主程式 main 執行,在 main 中完成 a.初試化各硬體裝置 b.初始化各軟體模組 c.進入死迴圈 無限迴圈 d呼叫各模組的處理函式 下面是幾個 著名 的死迴圈 1 作業系統是死迴圈 2 win3...

嵌入式 檔案IO的學習

用 實現linux中cp複製的功能 include stdio.h include unistd.h include fcntl.h include string.h intmain int argc,char ar int argc是記錄你在命令列敲入的字串個數,char ar 是存放你寫入是字串...

嵌入式開發培訓學哪些?嵌入式培訓課程靠譜嗎

嵌入式系統可以說是當前熱門 有發展前景的it應用領域之一,包括手機 電子字典 可視 數字相機 數字攝像機 機頂盒 智慧型玩具醫療儀器和航空航天裝置等都是典型的嵌入式系統,國內的嵌入式人才極度匱乏,據權威部門統計,我國目前嵌入式軟體人才缺口每年都在50萬人左右。該職業一直處於供不應求的狀態,所以嵌入式...