前面介紹的緩沖文件系統(tǒng)是借助文件結(jié)構(gòu)體指針來(lái)對(duì)文件進(jìn)行管理,通過(guò)文件指針來(lái)對(duì)
文件進(jìn)行訪問(wèn),既可以讀寫(xiě)字符、字符串、格式化數(shù)據(jù),也可以讀寫(xiě)二進(jìn)制數(shù)據(jù)。非緩沖文
件系統(tǒng)依賴于操作系統(tǒng),通過(guò)操作系統(tǒng)的功能對(duì)文件進(jìn)行讀寫(xiě),是系統(tǒng)級(jí)的輸入輸出,它不
設(shè)文件結(jié)構(gòu)體指針,只能讀寫(xiě)二進(jìn)制文件,但效率高、速度快,由于A N S I標(biāo)準(zhǔn)不再包括非緩
沖文件系統(tǒng),因此建議大家最好不要選擇它。本書(shū)只作簡(jiǎn)單介紹。
1. 文件的打開(kāi)與關(guān)閉
非緩沖文件系統(tǒng)不是A N S I標(biāo)準(zhǔn)定義的,是U N I X型I / O系統(tǒng)的一員,所以,其原型位于
i o . h文件中。
打開(kāi)文件:
int open(char *fname,int acces;s)
打開(kāi)文件名為f n a m e,以a c c e s s方式訪問(wèn):
a c c e s s的值為:O _ R D O N LY 只讀
O _ W R O N LY 只寫(xiě)
O _ R D W R 讀寫(xiě)
關(guān)閉文件:
close(int fd);
下述程序用U N I X系統(tǒng)打開(kāi)和關(guān)閉一個(gè)文件:
#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) 以 /只*讀方式打開(kāi)文件*/
{
printf(“cannt open file!”);
e x i t ( 0 ) ;
}
printf(“file existent!”);
if (close(fd)) printf(“error in closing filen”);
}
2. 文件的讀寫(xiě)
對(duì)非緩沖文件系統(tǒng)的讀寫(xiě)函數(shù)的原型在i o . h頭文件中,其調(diào)用形式為:
int read(int fd,void *buf,int count)
r e a d ( )函數(shù)從f d說(shuō)明的文件中讀取c o u n t個(gè)字節(jié)到b u f所指向的緩沖區(qū)。函數(shù)的返回值是實(shí)際讀寫(xiě)的字節(jié)數(shù)。
int write(int fd,void *buf,int count)
w r i t e ( )函數(shù)把c o u n t個(gè)字節(jié)從b u f寫(xiě)入到f d說(shuō)明的文件中。函數(shù)的返回值是實(shí)際寫(xiě)入的字節(jié)
數(shù)。
下面例子從文件T E S T. T S T中讀取它的前半1 0 0個(gè)字節(jié)并放到數(shù)組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)打 /開(kāi)*文件*/
{
printf(“cannot open file !n”);
e x i t ( 0 ) ;
}
if (read(fd,buffer,100)!=100) / *判斷讀寫(xiě)的字節(jié)數(shù)是否正確* /
printf(“Possible read error.”);
}
非緩沖文件系統(tǒng)
標(biāo)簽:printf