Linux標準I O程式設計

2021-10-23 21:00:51 字數 4478 閱讀 8831

標準io的核心物件就是流(file結構體)

1. 流的開啟

函式原型:file *

fopen

(const

char

*path,

const

char

*mode)

函式引數:path 要開啟的檔案路徑及檔名

mode 檔案開啟方式

函式返回值:成功--

-指向file指標;失敗--

-null

mode值

取值說明

r開啟唯讀檔案,該檔案必須存在

r+開啟可讀寫檔案,該檔案必須存在

w開啟只寫檔案,若檔案存在擦除內容;若不存在建立檔案

w+開啟可讀寫檔案,若檔案存在擦除內容;若不存在建立檔案

a開啟只寫檔案,若檔案存在寫入的資料會被加到檔案尾;若不存在建立檔案

a+開啟可讀寫檔案,若檔案存在寫入的資料會被加到檔案尾;若不存在建立檔案

當使用者程式執行時,系統自動開啟3個流:stdin、stdout、stderr

2. 流的關閉

函式原型:int

*fclose

(file *stream)

函式引數:stream 已開啟的流指標

函式返回值:成功--

-0;失敗--

-eof

程式結束時會自動關閉所有開啟的流

3. 錯誤處理

3.1

perror

()函式

函式原型:void

*perror

(const

char

* s)

函式引數:s 在標準錯誤流上輸出的資訊

函式返回值:無

示例**:

#include

intmain()

fclose

(fp)

;return0;

}

如果檔案不存在,程式執行時會列印如下資訊:

fail to fopen: no such file or diectory
3.2

strerror

()函式

函式原型:char

*strerror

(int errnum)

函式引數:errnum 錯誤碼

函式返回值:錯誤碼對應的錯誤資訊

示例**:

#include

intmain()

fclose

(fp)

;return0;

}

如果檔案不存在,程式執行時會列印如下資訊:

fail to fopen: no such file or diectory
4. 流的讀寫
4.1 按字元(位元組)輸入/輸出

函式原型:int

getc

(file *stream)

//int

fgetc

(file *stream)

//int

getchar

(void

)//從stdin中讀取乙個字元

函式引數:stream 要輸入的檔案流

函式返回值:成功--

-讀取的字元;失敗--

-eof

函式原型:int

putc

(int c, file *stream)

//向指定的流輸出乙個字元

intfputc

(int c, file *stream)

//int

putchar

(int c)

//從stdout輸出乙個字元

函式引數:c 輸出的字元

stream 指定的檔案流

函式返回值:成功--

-輸出的字元;失敗--

-eof

4.2 按行輸入/輸出

函式原型:char

*gets

(char

*s)//容易造成緩衝區溢位,不建議使用

char

*fgets

(char

*s,int size, file *stream)

//從指定的流中讀取乙個字串,當遇到\n時,會讀取\n或讀取size-1個字元後返回

size 輸入的字串長度

stream 對應的流

函式返回值:成功--

-s;失敗--

-null

函式原型:int

puts

(const

char

*s)//

intfputs

(const

char

*s, file *stream)

// stream 對應的流

函式返回值:成功--

-s;失敗--

-null

4.3 以指定大小為單位讀寫檔案

在檔案流被開啟之後,對檔案流按指定大小為單位進行讀寫操作

函式原型:size_t fread

(void

*ptr, size_t size, size_t nmemb, file * stream)

函式引數:ptr 存放讀入記錄的緩衝區

size 讀取的每個記錄的大小

nmemb 讀取的記錄數

stream 要讀取的檔案流

函式返回值:成功--

-返回實際讀到的nmemb數目;失敗--

-eof

函式原型:size_t fwrite

(void

*ptr, size_t size, size_t nmemb, file * stream)

函式引數:ptr 存放寫入記錄的緩衝區

size 寫入的每個記錄的大小

nmemb 寫入的記錄數

stream 要寫入的檔案流

函式返回值:成功--

-返回實際寫入的nmemb數目;失敗--

-eof

5. 流的定位

每個開啟的流內部都有乙個當前讀寫位置。流在開啟時,當前讀寫位置為0,表示檔案的開始位置。每讀寫一次後,當前讀寫位置自動增加實際讀寫的大小。在讀寫流之前可先對流進行定位,即移動到指定的位置再操作。

函式原型:int

fseek

(file * stream,

long offset,

int whence)

函式引數:stream 要定位的檔案流

offset 相對於基準值的偏移量

whence 基準值

-->

seek_set 代表檔案起始位置

-->

seek_end 代表檔案結束位置

-->

seek_cur 代表檔案當前讀寫位置

函式返回值:成功--

-0;失敗--

-eof

函式原型:long

ftell

(file * stream)

函式引數:stream 要定位的檔案流

函式返回值:成功--

-返回當前讀寫位置;失敗--

-eof

6. 格式化輸入/輸出

格式化輸入輸出函式可以指定輸入輸出的具體格式

函式原型:int

scanf

(const

char

*format,..

.)intfscanf

(file *fp,

const

char

*format,..

.)intsscanf

(char

*buf,

const

char

*format,..

.)函式引數:format 輸入的格式

fp 作為輸入的流

buf 作為輸入的緩衝區

函式返回值:成功--

-輸出字元數;失敗--

-eof

函式原型:int

printf

(const

char

*format,..

.)intfprintf

(file *fp,

const

char

*format,..

.)intsprintf

(char

*buf,

const

char

*format,..

.)函式引數:format 輸出的格式

fp 接收輸出的流

buf 接收輸出的緩衝區

函式返回值:成功--

-輸出字元數;失敗--

-eof

linux程式設計 標準IO

標準io簡介 1.標準io與三種緩衝區關聯 1 全緩衝 通過標準io對檔案 或裝置 進行操作時,通常緩衝區滿之後,才會進行實際的io操作 即寫到核心 對檔案進行操作時通常使用全緩衝。2 行緩衝 通過標準io對檔案 或裝置 進行操作時,通常緩衝區滿之後,或者遇到換行符時,才會進行實際的io操作 即寫到...

Linux程式設計 標準IO(2)

簡單的檔案讀寫例項 include stdiotest.h include include void readlog printf open file success n 單位元組讀取測試 int ichar fgetc plog if eof ichar 位元組回送測試 int iput unge...

Linux程式設計 標準IO(3)

讀寫定位及格式化輸出 1.讀寫定位函式 int fseek file stream,long offset,int whence 設定檔案讀寫位置 long ftell file stream 獲取檔案讀寫位置 void rewind file stream 回到檔案開頭 可處理檔案長度大於long...