Linux標準庫IO介面

2021-10-05 11:41:45 字數 3481 閱讀 8828

標準庫的io介面:

#include

file *

fopen

(const

char

*path,

const

char

*mode)

;返回值: 成功將返回乙個指向檔案物件file的指標.否則,將返回 null

fopen開啟檔名為path指向的字串的檔案,將乙個流與它關聯

引數mode指向乙個字串,以下列序列之一開始(序列之後可以有附加的字元)

:r 用於唯讀,流被定位於檔案的開始

r+ 用於讀寫,流被定位於檔案的開始

w 用於只寫,流被定位於檔案的開始

w+ 用於讀寫,如果檔案不存在就建立它.否則將截斷它,流被定位於檔案的開始

a 用於追加(在檔案尾寫)

.如果檔案不存在就建立它,流被定位於檔案的末尾

a+ 用於追加(在檔案尾寫)

.如果檔案不存在就建立它,讀檔案的初始位置是檔案的開始,但是輸出總是被追加到檔案的末尾

r+的讀寫和w+的讀寫有什麼區別:

r+ 開啟檔案用於讀寫, 若檔案不存在則報錯

w+ 開啟檔案用於讀寫, 若檔案不存在則建立, 檔案存在則清空原有內容

b如果不指定b, 則認為檔案是文字操作, 加上b則認為是二進位制操作, 區別在於:

有時候乙個特殊字元, 只是乙個字元但是佔據兩個位元組的記憶體(讀取乙個100位元組大小的檔案, 文字操作最終讀取出來的資料, 不一定是100位元組)

size_t fread

(void

* buffer, size_t size, size_t count, file* stream)

;buffer: 指向緩衝區讀取的資料或者是用於接收資料的記憶體位址

size: 資料塊大小

count: 資料塊個數

stream: 讀取的檔案流指標

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

size_t fwrite

(void

* buffer, size_ size, size_t count, file* stream)

;buffer: 指向緩衝區讀取的資料或者是用於接收資料的記憶體位址

size: 資料塊大小

count: 資料塊個數

stream: 寫入的檔案流指標

注意: fread/fwrite操作的資料實際大小是資料塊大小*資料塊個數

返回值:返回實際操作的資料塊個數

例如: 讀取乙個檔案 size = 10, count = 2;

如果檔案大小足夠則返回2;但是若檔案大小不足20位元組, 則會返回1, 因為第二塊沒有讀滿

fread如果讀到了檔案末尾會返回0, 若要讀取1000個位元組, 資料塊個數(count)為1, 資料塊大小(size)只有512位元組, 雖然讀了512位元組也會返回0

fread/ fwrite比較推薦資料塊大小為1, 資料塊個數是想要操作的資料大小

int

fseek

(file *stream,

long offset,

int whence)

;將檔案的讀寫指標從whence位置偏移offset個位元組--

--跳轉檔案讀寫位置

fseek

()為stream指向的流設定檔案位置指示符.

跳轉位置(以位元組為單位)是通過將偏移位元組加到地點指定的位置.

如果將whence設定為seek_set

,seek_cur或seek_end

,則偏移量是相對於檔案的開頭,當前位置或檔案末尾

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

--int

fclose

(file *stream)

;關閉檔案流指標,釋放資源

fseek函式對於檔案沒有資料也可以跳轉讀寫位置

對檔案資料進行字串操作的時候要注意檔案資料中的』\0』 , 開啟檔案一定不要忘了關閉檔案

下面寫乙個程式, 熟悉一下它們的用法:

#include

#include

intmain()

//fseek跳轉讀寫位置

//seek_set --從檔案起始偏移

//seek_cur --從當前讀寫位置偏移

//seek_end --從檔案末尾偏移

fseek

(fp,0,

seek_end);

//將檔案的讀寫位置偏移到末尾

char buf=

"hello world!\n"

;int ret =

fwrite

(buf,

strlen

(buf),1

, fp);if

(ret ==0)

fseek

(fp,0,

seek_set);

char tmp[

1024]=

; ret =

fread

(tmp,1,

1023

, fp)

;//在塊大小為1的情況下不會出現讀到資料依然返回0的情況

if(ret ==0)

printf

("ret:%d-[%s]\n"

, ret, tmp)

;fclose

(fp)

;return0;

}

執行結果:

在執行程式前, 我的目錄下原來沒有test.txt檔案; 程式執行後, 可以看到當前目錄下自動建立了乙個test.txt檔案, 並且寫入內容:

基礎IO 標準庫IO介面 系統呼叫IO介面

標準庫io介面 fopen fclose fread fwrite fseek file fopen const char path,const char mode r唯讀開啟,檔案不存在報錯 r 讀寫開啟,檔案不存在報錯 w只寫,檔案不存在則建立 若存在則清空原內容 w 讀寫開啟,檔案不存在則建立...

c標準庫I O介面和系統呼叫I O介面

c標準庫i o介面 fopen 函式原型 file fopen const char path,const char mode 功能 開啟檔案,並返回指向該檔案的指標 引數 path 開啟檔案的路徑及檔名 mode 開啟檔案的方式,其可以有以下值 r 唯讀方式開啟,檔案必須存在,若不存在則報錯 r ...

C標準庫I O和Linux檔案I O

c標準 i o庫函式在標頭檔案 stdio.h 中宣告,而 read write 等函式 檔案i o 在標頭檔案 unistd.h 中宣告 linux的訪問許可權分為 讀 寫 執行三種,可以使用ls l進行檢視 niesh niesh desktop ls lh 總用量 8.0k rw rw r 1...