前面介紹的緩沖文件系統是借助文件結構體指針來對文件進行治理,通過文件指針來對
文件進行訪問,既可以讀寫字符、字符串、格式化數據,也可以讀寫二進制數據。非緩沖文
件系統依靠於操作系統,通過操作系統的功能對文件進行讀寫,是系統級的輸入輸出,它不
設文件結構體指針,只能讀寫二進制文件,但效率高、速度快,由於A N S I標准不再包括非緩
沖文件系統,因此建議大家最好不要選擇它。本書只作簡單介紹。
1. 文件的打開與關閉
非緩沖文件系統不是A N S I標准定義的,是U N I X型I / O系統的一員,所以,其原型位於
i o . h文件中。
打開文件:
int open(char *fname,int acces;s)
打開文件名為f n a m e,以a c c e s s方式訪問:
a c c e s s的值為:O _ R D O N LY 只讀
O _ W R O N LY 只寫
O _ R D W R 讀寫
關閉文件:
close(int fd);
下述程序用U N I X系統打開和關閉一個文件:
#include "io.h"
#include "fcntl.h"
#include "sysstat.h"
m a i n ( a r g c , a r g v )
int argc;
char *argv[]
{
int fd;
if((fd=open(argv[1],O_RDONLY))==-1) 以 /只*讀方式打開文件*/
{
printf("cannt open file!");
e x i t ( 0 ) ;
}
printf("file existent!");
if (close(fd)) printf("error in closing file
");
}
2. 文件的讀寫
對非緩沖文件系統的讀寫函數的原型在i o . h頭文件中,其調用形式為:
int read(int fd,void *buf,int count)
r e a d ( )函數從f d說明的文件中讀取c o u n t個字節到b u f所指向的緩沖區。函數的返回值是實際讀寫的字節數。
int write(int fd,void *buf,int count)
w r i t e ( )函數把c o u n t個字節從b u f寫入到f d說明的文件中。函數的返回值是實際寫入的字節
數。
下面例子從文件T E S T. T S T中讀取它的前半1 0 0個字節並放到數組b u ff e r中。
#include "io.h"
#include "stdio.h"
#include "fcntl.h"
m a i n ( )
{
int fd;
char buffer[100];
if ((fd=open("TEST.TST",O_RDONLY))==-1)打 /開*文件*/
{
printf("cannot open file !
");
e x i t ( 0 ) ;
}
if (read(fd,buffer,100)!=100) / *判定讀寫的字節數是否正確* /
printf("Possible read error.");
}