I/O文件操作
这是C提供的另一种文件操作,它是通过直接存/取文件来完成对文件的处理,而上篇所说流式文件操作是通过缓冲区来进行;流式文件操作是围绕一个FILE指针来进行,而此类文件操作是围绕一个文件的"句柄"来进行,什么是句柄呢?它是一个整数,是系统用来标识一个文件(在WINDOWS中,句柄的概念扩展到所有设备资源的标识)的唯一的记号。此类文件操作常用的函数如下表,这些函数及其所用的一些符号在io.h和fcntl.h中定义,在使用时要加入相应的头文件。
函数 | 说明 |
---|---|
open() | 打开一个文件并返回它的句柄 |
close() | 关闭一个句柄 |
lseek() | 定位到文件的指定位置 |
read() | 块读文件 |
write() | 块写文件 |
eof() | 测试文件是否结束 |
filelength() | 取得文件长度 |
rename() | |
chsize() | 改变文件长度 |
open()
- 功能
打开一个文件并返回它的句柄 - 原型
int open(const char *path, int access [, unsigned mode]);
path是要打开的文件名,
access是打开的模式,
mode是可选项: 表示文件的属性,主要用于UNIX系统中,在DOS/WINDOWS这个参数没有意义。其中文件的打开模式如下表。
符号 | 含义 |
---|---|
O_RDONLY | 只读方式 |
O_WRONLY | 只写方式 |
O_RDWR | 读/写方式 |
O_NDELAY | 用于UNIX系统 |
O_APPEND | 追加方式 |
O_CREAT | 如果文件不存在就创建 |
O_TRUNC | 把文件长度截为0 |
O_EXCL 和O_CREAT连用 | 如果文件存在返回错误 |
O_BINARY | 二进制方式 |
O_TEXT | 文本方式 |
对于多个要求,可以用"|"运算符来连接,如O_APPEND|O_TEXT表示以文本模式和追加方式打开文件。
例:int handle=open("c://msdos.sys",O_BINARY|O_CREAT|O_WRITE)
详细: https://baike.baidu.com/item/open/13009226?fr=aladdin
- 返回值
失败:将返回一个小于0的值
成功:返回0;
close()
- 功能
关闭一个句柄,即关闭打开的 TextStream 文件。 - 原型
int close(int handle) - 返回值
失败:将返回一个小于0的值;
成功:返回0;
lseek()
- 头文件
#include <sys/types.h>
#include <unistd.h> - 功能
定位到指定的位置 - 原型
long lseek(int handle, long offset, int fromwhere); offset是移动的量, fromwhere是移动的基准位置,取值和前面讲的fseek()一样, SEEK_SET:文件首部; SEEK_CUR:文件当前位置; SEEK_END:文件尾。
- 返回值
此函数返回执行后文件新的存取位置。
例:
lseek(handle,-1234L,SEEK_CUR);//把存取位置从当前位置向前移动1234个字节。
x=lseek(hand1e,0L,SEEK_END);//把存取位置移动到文件尾,x=文件尾的位置即文件长度
read()
- 功能
从文件读取一块数据 - 原型
int read(int handle, void *buf, unsigned len);
buf保存读出的数据,
len是读取的字节。
- 返回值
函数返回实际读出的字节。
例:char x[200];
read(hnd1,x,200);
write()
- 功能
写一块数据到文件中, - 原型
int write(int handle, void *buf, unsigned len);
buf保存写入的数据,
len是写入的字节。
- 返回值
返回实际写入的字节。
例:char x[]="I Love You";
write(handle,x,strlen(x));
eof()
- 功能
类似feof(),测试文件是否结束 - 返回值
是返回1,否则返回0; - 原型
int eof(int handle);
例:while(!eof(handle1))
{……};
filelength()
- 功能
返回文件长度 - 原型
long filelength(int handle);
相当于lseek(handle,0L,SEEK_END)
例:long x=filelength(handle);
rename()
- 功能
重命名文件 - 原型
int rename(const char *oldname, const char *newname);
oldname是旧文件名,
newname是新文件名。
- 返回值
成功:返回0。
失败:返回小于0值。
例:rename(“c://config.sys”,“c://config.w40”);
chsize();
- 功能
改变文件长度 - 原型
int chsize(int handle, long size); size表示文件新的长度,
- 返回值
成功返回0,
否则返回-1,如果指定的长度小于文件长度,则文件被截短;如果指定的长度大于文件长度,则在文件后面补’/0’。
例:chsize(handle,0x12345);