前面介紹的緩沖文件系統是借助文件結構體指針來對文件進行治理,通過文件指針來對 文件進行訪問,既可以讀寫字符、字符串、格式化數據,也可以讀寫二進制數據。非緩沖文 件系統依靠于操作系統,通過操作系統的功能對文件進行讀寫,是系統級的輸入輸出,它不 設文件結構體指針,只能讀寫二進制文件,但效率高、速度快,由于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 "sys/stat.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/n"); } 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 !/n"); e x i t ( 0 ) ; } if (read(fd,buffer,100)!=100) / *判定讀寫的字節數是否正確* / printf("Possible read error.");