非緩沖檔案操作
非緩沖檔案操作針對于小規模檔案的讀寫,或者是實時裝置,例如數據機、連接配接
于序列槽的工業裝置。執行非緩沖檔案操作後,應用程式将立即擷取或傳送資料。非緩沖文
件操作的函數隻有兩個,分别是 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
個枚舉常量表示,見表