- define FA_RDONLY 0x01 / 只读 /
- define FA_HIDDEN 0x02 / 隐藏 /
- define FA_SYSTEM 0x04 / 系统 /
- define FA_LABEL 0x08 / 卷标 /
- define FA_DIREC0x10 / 目录 /
- define FA_ARCH 0x20 / 归档 /
- define O_RDONLY 1 只读
- define O_WRONLY 2 只写
- define O_RDWR 4 读写
- define O_CREAT 0x0100 /新建文件/
- define O_TRUNC 0x0200 /独占打开/
- define O_EXCL 0x0400 /执行文件/
- define O_APPEND 0x0800 /追加到文件尾/
- define O_TEXT 0x4000 /文本文件/
- define O_BINARY 0x8000 /二进制文件/
- define O_RDONLY 1 /只读/
- define O_WRONLY 2 /只写/
- define O_RDWR 4 /读读/
- define O_CREAT 0x0100 /创建文件/
- define O_TRUNC 0x0200 /独占打开/
- define O_EXCL 0x0400 /执行文件/
- define O_APPEND 0x0800 /追加到文件尾/
- define O_TEXT 0x4000 /文本文件/
- define O_BINARY 0x8000 /二进制模式/
第10章 输入/输出函数库:io.h 在C程序中,常常需要对文件及文件流进行读取、输出及写入等操作,C语言专门提供了这样的函数库——输入/输出函数库(io.h)。 10.1 access()——文件访问权限设置函数 access()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\01
access()函数用于确定文件的访问权限。
语法
int access(const char *file, int auth);
access()函数的语法参数说明如下:
参数file为文件名。
参数auth值为0时测试文件是否存在,值为2时测试文件是否可写。
access()测试结果:允许时返回0,否则返回-1。
示例
本示例演示用access()函数确定文件是否存在,程序执行前保证d:\tc\01.c存在,d:\tc\02.c不存在。其具体代码如下:
运行结果如图10.1所示。
图10.1 使用access()函数确定文件是否存在 10.2 chmod()——改变文件访问方式函数 chmod()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\02
chmod()函数用于改变文件访问方式。
语法
int chmod(const char *file, int auth);
chmod()函数的语法参数说明如下:
参数file为要修改的文件名。
参数auth为要修改的权限,其值为:S_IREAD,S_IWRITE,S_IEXEC。
chmod()函数若修改成功返回0,否则返回-1。
示例
本示例演示用chmod()函数将文件设置为只读,程序执行前保证d:\tc\01.c存在,d:\tc\02.c不存在。其具体代码如下:
运行结果如图10.2所示。
图10.2 用chmod()函数将文件设置为只读 10.3 close()——关闭文件函数 close()函数
实用程度:★★★☆☆
close()函数用于关闭由open()函数所打开的文件。
语法
int close(int handle);
close()函数的语法参数说明如下:
参数handle为打开文件时所返回的文件句柄。
close()函数成功关闭文件返回0,否则返回-1。
示例
示例参见10.13节。 10.4 creat()——创建文件函数 creat()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\04
creat()函数用于创建指定文件名的文件。以下为创建文件时指定的操作权限:
define FA_RDONLY 0x01 / 只读 /
define FA_HIDDEN 0x02 / 隐藏 /
define FA_SYSTEM 0x04 / 系统 /
define FA_LABEL 0x08 / 卷标 /
define FA_DIREC0x10 / 目录 /
define FA_ARCH 0x20 / 归档 /
语法
int creat (const char *file, int auth);
creat()函数的语法参数说明如下:
参数file为文件名。
参数auth为操作权限。
creat()函数成功执行时返回所创建文件的句柄,否则返回-1。
示例
本示例演示用creat()函数创建一个文件,然后输入内容。注意,creat()方法创建文件不能覆盖同名文件。其具体代码如下:
运行过程如图10.3(a)所示。运行结果如图10.3(b)所示。
图10.3 程序运行过程和结果 10.5 dup()——复制文件句柄函数 dup()函数
实用程度:★★★★☆
实例位置:配套资源\SL\10\05
dup()函数用于复制文件句柄,常用于由流式文件获取句柄。从这个角度来说,dup()函数的功能与fdopen()正好相对。fdopen()的功能是由句柄获取文件流。
语法
int dup(int *handle);
dup()函数的语法参数说明如下:
参数handle为要检测的文件句柄。
dup()函数的返回值:当函数成功执行时返回新的文件句柄,出错时返回-1。
示例
本程序演示怎样在流式文件操作时进行加锁和解锁的操作。主体操作都用流文件操作函数,加锁解锁时的文件句柄通过dup函数从流文件获得。其具体代码如下:
10.6 eof()——文件检测结束函数
eof()函数
实用程度:★★★★☆
实例位置:配套资源\SL\10\06
eof()函数用于检查文件是否结束。
语法
int eof(int *handle);
eof()函数的语法参数说明如下:
参数handle为要检测的文件句柄。
eof()到文件尾函数返回1,没到文件尾返回0,出错时返回-1。
示例
本示例演示用read()函数从文件读数据,用eof()函数测试文件尾。其具体代码如下:
运行结果如图10.4所示。
图10.4 读数据 10.7 fdopen()——连接文件句柄函数 fdopen()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\07
fdopen()函数用于将流与文件句柄连接。stdio.h中的函数fopen()、fclose()、fscanf()和fprintf()是高级文件操作方式——以流的方式操作文件,fdopen()可以连接文件句柄和流。
语法
FILE fdopen(int handle, char type);
fdopen()函数的语法参数说明如下:
参数handle为要操作的句柄。
参数type指定流打开的方式。
fdopen()函数返回指向该流的文件指针。
示例
本示例演示用fdopen()函数连接文件句柄和流,以流的方式向文件中输入一行字符串。其具体代码如下:
运行结果如图10.5所示。
图10.5 用流向文件写入字符串 10.8 filelength()——文件字节数统计函数 filelength()函数
实用程度:★★★★☆
filelength()函数用于统计由open()所打开文件的字节数。
语法
long filelength(int handle);
filelength()函数的语法参数说明如下:
参数handle为要统计的文件句柄。
filelength()函数返回打开文件的长度。
示例
示例见10.12节。 10.9 getftime()——获取文件时间函数 getftime()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\09
getftime()函数用于读取指定文件的时间。
语法
int getftime(int handle, struct ftime *ftimep);
getftime()函数的语法参数说明如下:
参数handle为要获取文件的句柄。
参数ftimep为存储文件时间的结构体。
getftime()函数的返回值:成功返回文件的修改时间,否则返回-1。
示例
本示例演示用getftime()函数获取文件最后访问时间。其具体代码如下:
运行结果如图10.6所示。
图10.6 使用getftime()函数获取文件时间 10.10 isatty()——设备类型检查函数 isatty()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\10
isatty()函数用于检查给定的设备类型。
常用设备名:
stdin 标准输入设备 键盘
stdout 标准输出设备 显示器
stderr 标准出错设备
stdaux 辅助设备
stdprn 打印机
语法
int isatty(int handle);
isatty()函数的语法参数说明如下:
参数handle为要检查的设备文件句柄。
isatty()函数对于设备返回非0整数,对于普通文件返回0。
示例
本示例演示用isatty()函数将字符串复制到新建的空间。其具体代码如下:
运行结果如图10.7所示。
图10.7 使用isatty ()函数判断设备和普通文件 10.11 lock()——文件共享锁设置函数 lock()函数
实用程度:★★★★☆
实例位置:配套资源\SL\10\11
lock()函数用于设置指定文件的文件共享锁。
语法
int lock(int handle, long offset, long length);
lock()函数的语法参数说明如下:
参数handle为要设置共享锁的文件句柄。
参数offset为要设置的开始位置。
参数length为要设置的长度。
lock()函数设置成功返回0,否则返回非0值。
示例
本示例演示用lock()函数为文件设置共享锁,用unlock()取消共享锁。其具体代码如下:
10.12 lseek()——移动文件指针函数
lseek()函数
实用程度:★★★★☆
实例位置:配套资源\SL\10\12
lseek()函数用于移动打开文件指针。
语法
long lseek(int handle, long offset, int fromwhere);
lseek()函数的语法参数说明如下:
参数handle为要移动文件指针的文件句柄。
参数offset为要移动的偏移量。
参数fromwhere为文件指针的当前位置。
lseek()函数的返回值:移动文件指针后的文件指针位置。
示例
本示例演示先创建文件,内容为mingri book!。再打开文件,取前6个字符,再跳过空格取下面的4个字符(跳过空格时,文件指针位置应为7)。其具体代码如下:
运行结果如图10.8所示。
图10.8 移动文件指针的操作 10.13 open()——打开文件函数 open()函数
实用程度:★★★★☆
实例位置:配套资源\SL\10\13
open()函数用于打开文件。
文件属性如下:
define O_RDONLY 1 只读
define O_WRONLY 2 只写
define O_RDWR 4 读写
define O_CREAT 0x0100 /新建文件/
define O_TRUNC 0x0200 /独占打开/
define O_EXCL 0x0400 /执行文件/
define O_APPEND 0x0800 /追加到文件尾/
define O_TEXT 0x4000 /文本文件/
define O_BINARY 0x8000 /二进制文件/
语法
int open(char *path, int access[, int auth]);
open()函数的语法参数说明如下:
参数path为要打开的包含路径的文件名。
参数access为打开方式。
参数auth为访问权限。
open()函数的返回值:该文件句柄。
示例
本示例演示用open()函数打开文件,用read()函数读取数据,程序运行前确保d:\a.txt存在。其具体代码如下:
运行结果如图10.9所示。
图10.9 使用read ()读数据 10.14 read()——读文件函数 read()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\14
read()函数用于读取打开文件的内容。
语法
int read(int handle, void *buf, int len);
read()函数的语法参数说明如下:
参数handle为要读取的文件。
参数buf为要将读取的内容保存的位置。
参数len为要读取文件的长度。
read()函数的返回值:读取的字节数。
示例
示例参见10.6节。 10.15 setmode()——设置文件打开方式函数 setmode()函数
实用程度:★★★★☆
实例位置:配套资源\SL\10\15
setmode()函数用于设置打开文件的模式。文件模式如下:
define O_RDONLY 1 /只读/
define O_WRONLY 2 /只写/
define O_RDWR 4 /读读/
define O_CREAT 0x0100 /创建文件/
define O_TRUNC 0x0200 /独占打开/
define O_EXCL 0x0400 /执行文件/
define O_APPEND 0x0800 /追加到文件尾/
define O_TEXT 0x4000 /文本文件/
define O_BINARY 0x8000 /二进制模式/
语法
int setmode(int handle, int amode)
setmode()函数的语法参数说明如下:
参数handle为要设置的文件句柄。
参数amode为要设置的方式。
setmode()函数的返回值:成功执行时返回0,否则返回-1。
示例
本示例演示用setmode()函数重新为打开的文件设置操作模式(程序运行前确保d:\a.txt存在)。其具体代码如下:
运行结果如图10.10所示。
图10.10 使用setmode()函数设置操作模式 10.16 tell()——获取文件指针位置函数 tell()函数
实用程度:★★★★☆
tell()函数用于获取打开文件的指针位置。
语法
long tell(int handle);
tell()函数的语法参数说明如下:
参数handle为获取文件指针的文件句柄。
tell()函数的返回值:正确执行时返回给定文件的文件指针位置,否则返回-1。
示例
示例参见10.12节。 10.17 unlock()——解除共享锁函数 unlock()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\17
unlock()函数用于解除文件的共享访问锁。
语法
int unlock(int handle, long offset, long length);
unlock()函数的语法参数说明如下:
参数handle为要解除共享锁的文件句柄。
参数offset为要解除共享锁的开始位置。
参数length为要解除共享锁的长度。
unlock()函数的返回值:设置成功返回0,否则返回非0值。
示例
示例参见10.11节。 10.18 write()——写文件函数 write()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\10\18
write()函数用于将指定内容写入打开的文件。
语法
int write(int handle, void *buf, int len);
write()函数的语法参数说明如下:
参数handle为要写入的文件句柄。
参数buf为要写入的内容。
参数len为要写入文件的长度。
write()函数的返回值:写入文件内容的长度。
示例
示例参见10.4节。