天天看點

C/C++:檔案I/O操作非緩沖檔案操作

非緩沖檔案操作

非緩沖檔案操作針對于小規模檔案的讀寫,或者是實時裝置,例如數據機、連接配接

于序列槽的工業裝置。執行非緩沖檔案操作後,應用程式将立即擷取或傳送資料。非緩沖文

件操作的函數隻有兩個,分别是 read()函數和 write()函數,這些函數通過檔案辨別符找到

檔案。在介紹這些函數前,首先介紹 3 個作業系統預先配置設定的檔案辨別符。

 0:标準輸入,即通過終端輸入。

 1:标準輸出,即通過終端輸出。

 2:标準錯誤,系統中存放錯誤資訊的堆棧

read()函數用于從檔案中将資訊讀取到指定的記憶體區域中。該函數的一般形式是:

read(檔案辨別符, 記憶體塊指針, 記憶體塊長度);

檔案辨別符可使用 open()函數獲得,或者使用系統預先配置設定的檔案辨別符。記憶體塊指

針用于指定 read()函數讀取資料的儲存位置,記憶體塊長度在 read()函數的第 3 個參數裡定義。

read()函數的傳回值是它實際讀取的長度,如果傳回值為 0,表示它沒有讀取任何資料,運

行錯誤時則傳回-1。

#include <fcntl.h>

#include <iostream>

#include <cstdio>

#include <unistd.h>

#include <sys/types.h>

#include <sys/stat.h>

#define LENGTH 20000

using namespace std;

int main(){

int f,siz;

char c[LENGTH];

const char *f_path="fileop/1.txt";

f=open(f_path,O_RDONLY,LENGTH);

siz=read(f,c,LENGTH);

printf("%s\n",c);

close(f);

return 0;

}

write()函數用于将指定長度的資料寫入檔案中,該函數的一般形式是:

write(檔案辨別符, 記憶體塊指針, 記憶體塊長度);

函數的傳回值是它實際寫入的長度,如果傳回值為 0,表示它沒有寫入任何資料,運

行錯誤時則傳回 1。

#include <fcntl.h>

#include <iostream>

#include <cstdio>

#include <unistd.h>

#include <sys/types.h>

#include <sys/stat.h>

#define LENGTH 200

int main(){

char c[LENGTH];

int f,l,i;

const char *f_path="fileop/2.txt";

if ((i=read(0,c,LENGTH))<1){

return 1;

}

f=open(f_path,O_RDWR|O_CREAT,0664);

l=write(f,c,i);

if (l!=i){

printf("寫入出錯!\n");

}

close(f);

return 0;

}

随機讀寫檔案

f = open("outfile", O_RDWR | O_CREAT | O_APPEND, 0664);

//打開或建立一個檔案,從檔案末端操作

如果要在程式運作中指定指針的具體位置,可使用 lseek()函數實作。該函數的一般形

式是:

lseek(檔案辨別符, 偏移長度, 起始位置);

偏移長度用于設定指針的位置,起始位置是定義指針位置的參考坐标,該坐标可用 3

個枚舉常量表示,見表

C/C++:檔案I/O操作非緩沖檔案操作
C/C++:檔案I/O操作非緩沖檔案操作