04 Linux下檔案IO 標準IO學習筆記

2021-10-01 04:39:11 字數 3228 閱讀 5152

標準i/o-流

標準io-流自動重新整理緩衝區

標準io-定位流

標準io-判斷流是否出錯和結束

標準io-格式化輸出

全緩衝

當流的緩衝區無資料或無空間時才執行實際的io操作(開啟檔案時,預設的緩衝方式)

行緩衝

當在輸入和輸出中遇到換行符』\n』時,進行io操作(和終端有關時,預設的緩衝方式;標準輸入輸出流預設使用該方式)

無緩衝

資料直接寫入檔案,流不進行緩衝,錯誤流使用該方式

file *

fopen

(const

char

*path,

const

char

*mode)

流的開啟方式:(mode)

mode

說明r/rb

以唯讀方式開啟檔案,檔案必須存在

r+/r+b

以讀寫方式開啟檔案,檔案必須存在

w/wb

以只寫方式開啟檔案,若檔案存在則檔案長度清0,。若不存在則新建

w+/w+b

以讀寫方式開啟檔案,其它同w

a/ab

以只寫方式開啟檔案,若檔案不存在則建立;向檔案寫入的資料被追加到檔案末尾

a+/a+b

以讀寫方式開啟檔案。其它同a

注:b指以二進位制方式操作,否則以文字方式

#include

intmain()

...return0;

}

extern

int errno//存放錯誤號的變數

void

perror

(const

char

*s);

//先列印字串,再列印錯誤資訊

perror

("fopen");

//fopen:no such file or directory

char

*strerror

(int errno);//

printf

("fopen:%s\n"

,strerror

(errno));

fopen:no such file or directory

int

fclose

(file *stream)

;//關閉流時自動重新整理緩衝中的資料並釋放緩衝區

//當流不使用時,應當及時關閉

讀寫乙個字元:fgetc()/fputc()

讀寫一行:fgets()/fputs()

讀寫若干個物件:fread()/fwrite()

#include

intfgetc

(file *p)

;//和getc()等價

intgetc

(file *p)

;int

getchar

(void);

//等價於fgetc(stdin) 從鍵盤輸入乙個字元

#include

intfputc

(file *p)

;//和putc()等價

intputc

(file *p)

;//失敗時返回eof

intputchar

(int c)

;//等價於putc(stdout) 向標準輸出流輸出乙個字元

#include

char

*gets

(char

*s);

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

char

*fgets

(char

*s,int size,file *p)

;//成功時返回s,到檔案末尾或出錯時返回null;遇到'\n'或已輸入size-1個字元時返回,總是以'\0'結尾,表示這是字串

#include

intputs

(const

char

*s);

intfputs

(const

char

*s,file *p)

;//puts將緩衝區s中的字串輸出到stdout,並追加'\n'

//fputs將緩衝區s中的字串輸出到stream

size_t fread(void prt,size_t stze, size_t n,file fp);//返回實際讀取資料個數

size_t fwrite(const voidptr,size_t size,size_t n,filefp);//返回實際寫資料個數

int s[10]

;if(fread

(s,sizeof

(int),

10,fp)

<0)

什麼時候重新整理緩衝區?

緩衝區滿,或流的緩衝區**現』\n』

關閉流的時候,如果緩衝區還有資料,則會把資料重新整理到實際檔案中

int fflush(file *fp);//linux中只能重新整理輸出緩衝區,輸入緩衝區只能通過呼叫一些函式讀取實現清空

long

ftell

(file *fp)

;//獲取當前讀寫位置的值

long

fseek

(file *fp,

long offset,

int whence)

;//seek_set(起始),seek_cur/seek_end

void

rewind

(file*fp)

;//直接定位到流的起始位置

int ferror (file *fp);//返回1表示出錯

int feof(file *fp);//返回1表示檔案已到末尾

int printf(const char fmt,…);

int fprintf(filefp,const char *fmt,…)

int sprintf(char *s,const char *fmt,…)

l4-d1/d2

Linux下檔案I O系統呼叫

庫是可重用的模組 處於使用者態 系統呼叫是os提供的服務 處於核心態 不能直接呼叫 而要使用類似int 0x80的軟中斷陷入核心 所以庫函式中有很大部分是對系統呼叫的封裝。從巨集觀上說,系統呼叫時核心層,c標準庫在應用層。檔案描述符是linux核心為了高效管理已被開啟的檔案而建立的索引,其值為乙個非...

Linux檔案 標準IO概述

標準i o指的是ansi c中定義的用於i o操作的一系列函式。只要作業系統安裝了c庫,就可以呼叫標準i o。換句話說,若程式使用標準i o函式,那麼源 無需進行任何修改就可以在其他作業系統上編譯,具有更好的可移植性。除此之外,由於標準i o封裝了緩衝區,使得在讀寫檔案的時候減少了系統呼叫的次數,提...

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...