嵌入式應用開發學習筆記 檔案IO

2021-10-17 14:18:52 字數 3688 閱讀 3126

最近在學習嵌入式應用程式設計,這裡用來記錄一些學習筆記,希望對自己有所幫助!

檔案模式是檔案屬性之一,佔16bit

訪問許可權佔9bit,即rwx-rwx-rwx,修飾位佔3bit,檔案型別佔4bit

命令:umask設定新建檔案的許可權,umask是新建立檔案、目錄應關閉許可權的位掩碼

命令:chmod修改檔案許可權

int creat(const char *filename, mode_t mode)

成功返回fd, 失敗返回-1

filename:要建立的檔名(包含路徑,預設為當前路徑)

mode:建立模式(s_irusr-可讀,s_iwusr-可寫,s_ixusr-可執行,s_irwxu-可讀、寫、執行等模式),可以通過man creat檢視幫助

1 #include 

2 #include

3 #include 45

intmain

(void)6

14printf

("file descriptor is %d\n"

, fd);15

close

(fd);16

return0;

17}

1 #include 

2 #include

3 #include

4 #include

5 #include

6 #include 78

intmain

(void)9

17printf

("fd = %d\n"

, fd);18

close

(fd);19

return0;

20}

int close(int fd)

成功返回0,失敗返回-1

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

功能:從檔案描述符fd所指定的檔案中讀取length個位元組到buf所指向的緩衝區中,返回值為實際讀取的位元組數。

返回讀取到的字元數,錯誤返回-1,讀到檔案末尾返回0

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

功能:把length個位元組從buf指向的緩衝區中寫到檔案描述符fd所指向的檔案中,返回值為實際寫入的位元組數。

返回寫入的字元數,錯誤返回-1,讀到檔案末尾返回0

1 #include 

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include 89

intmain

(void)10

20memset

(buf,0,

sizeof

(buf));

21 readnum =

read

(fd, buf,

1024);

22if

(readnum <0)

2327

else

if(readnum >0)

2831

close

(fd);32

return0;

33}

1 #include 

2 #include

3 #include

4 #include

5 #include

6 #include 78

intmain

(void)9

19memset

(buf,0,

sizeof

(buf));

20strcpy

(buf,

"how do you do");

21 writenum =

write

(fd, buf,

strlen

(buf));

22if

(writenum <0)

2327

28close

(fd);29

return0;

30}

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

功能:將檔案讀寫指標相對whence移動offset個位元組,操作成功時,返回檔案指標相對於檔案頭的位置。

whence可使用下述值:

seek_set-相對檔案開頭,seek_cur-相對檔案讀寫指標的當前位置,seek_end-相對檔案末尾

offset可取負值,表示向前移動,例如:lseek(fd, -5, seek_cur),可將檔案指針對當前位置向前移動5個位元組。

1 #include 

2 #include

3 #include

4 #include

5 #include

6 #include 78

intmain

(void)9

19memset

(buf,0,

sizeof

(buf));

20strcpy

(buf,

"this is my file to test lseek");

21 writenum =

write

(fd, buf,

strlen

(buf));

22if

(writenum <0)

2327

lseek

(fd,5,

seek_set);

2829

memset

(buf,0,

1024);

30 readnum =

read

(fd, buf,

sizeof

(buf));

31if

(readnum <0)

3236

else

if(readnum ==0)

3740

else

4144

close

(fd);45

return0;

46}

如何利用lseek來計算檔案長度?

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

lseek(fd, 0, seek_end)

int access(const char *pathname, int mode)

功能:判斷檔案是否可以進行某種操作(讀、寫等)

pathname:檔名稱

mode:要判斷的訪問許可權,可以取一下值或組合:r_ok-檔案可讀,w_ok-檔案可寫,x_ok-檔案可執行,f_ok-檔案存在

返回值:成功時,函式返回0,否則如果乙個條件不符時,返回-1

1 #include 

2 #include

3 #include

4 #include 56

intmain

(void)7

14else

1518

return0;

19}

嵌入式應用開發學習筆記 高階IO

檔案鎖分為建議性鎖和強制性鎖 記錄鎖又可分為讀取鎖和寫入鎖 int fcntl int fd,int cmd int fcntl int fd,int cmd,long arg int fcntl int fd,int cmd,struct flock lock 返回值 成功0,出錯 1,錯誤原因存...

嵌入式 檔案IO的學習

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

嵌入式開發學習

始於興趣,因興趣而精緻 對於很多人聽到嵌入式這個詞的時候,會感覺到有些迷茫,嵌入式到底和常見的硬體電路學習,軟體程式設計,物聯網等有什麼區別?學習嵌入式到底按照怎樣的乙個思路才能最快的進入狀態,領略嵌入式之美,怎樣才能正確進行興趣匹配實現自己的學習目標。接下來,就讓我簡單的介紹一下我對嵌入式學習的理...