前面介绍的缓冲文件系统是借助文件结构体指针来对文件进行治理,通过文件指针来对
文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数据。非缓冲文
件系统依靠于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不
设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于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.");
}