AP I/O 笔记
文件
二进制文件 :
文本文件 :
.
.
.
文件的高级操作(stdio.h)
主要是一些 标准C里面的 IO, 里面封装的是一些 LIUNX 的底层文件操作。
高级文件结构体:
typedef struct
{
int _fd; // 文件号
int _cleft; // 缓冲区中剩下的字符数
int _mode; // 文件操作方式
char *_next; // 文件当前读写位置
char *_buff; // 文件缓冲区位置
}FILE;
指针变量说明: FILE *fp;
用法:文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这 个指针获得文件信息,访问文件
l
文件关闭后,它的文件结构体被释放
标准 C 函数部分
打开文件fopen :
函数名: fopen
功 能: 打开一个流
用 法: FILE *fopen(char *filename, char *type);
返 值: 正常打开,为指向文件结构体的指针; 打开失败,为 NULL;
char *type:
"r" / "rb" 只读 "r"+ / "rb+"读写
"w" / "wb" 只写"w" / "wb"读写
"a" / "ab" 追加"a" / "ab"读写追加
eg:
打开文件fdopen :
函数名: fdopen
功 能: 将一已打开的文件描述符关联到文件流
用 法: FILE * fdopen(int FD, const char * MODE);
返 值: 成功返回文件指针,失败返回NULL;
eg:
关闭文件fclose :
函数名: fclose
功 能: 关闭一个流
用 法: int fclose(FILE *stream);
返 值: 正常关闭为0; 出错时,非0;
eg:
字符I/O:fputc fgetc
函数名: fputc
功 能: 把一字节代码c写入fp指向的文件中
用 法: int fputc(int ch, FILE *stream);
返 值: 正常,返回c; 出错,为EOF;
eg:
函数名: fgetc
功 能: 从fp指向的文件中读取一字节代码
用 法: int fputc(int ch, FILE *stream);
返 值: 正常,返回读到的代码值;读到文件尾或出错,为EOF;
eg:
字符串I/O:fgets fputs
函数名: fgets
功 能: 从fp指向的文件中读取一个字符串
用 法: char* fgets(char *string, int n, FILE *stream);
返 值: fgets正常时返回读取字符串的首地址;出错或文件尾,返回NULL;
fgets 从 fp 所指文件读n-1个字符送入string 指向的内存区,
并在最后加一个‘\0’
(若读入n-1个字符前遇换行符或文件尾(EOF)即结束)
eg:
函数名: fputs
功 能: 从fp指向的文件中写入一个字符串
用 法: int fputs(char *string, FILE *stream);
返 值: fputs正常时返回写入的最后一个字符;出错为EOF;
eg:
数据块I/O:fread fwrite
函数名: fread
功 能: 从一个流FILE *fp中读数据 到 *buffer
用 法: size_t fread(void *buffer, size_t size, size_t nitems, FILE *fp);
返 值: 成功,返回读的块数;出错或文件尾,返回0;
函数名: fwrite
功 能: 从一个流FILE *fp中读数据 到 *buffer
用 法: size_t fwrite(void *buffer,size_t size, size_t count,FILE *fp);
返 值: 成功,返回写的块数;出错或文件尾,返回0;
说明:
typedef unsigned size_t;
buffer: 指向要输入/输出数据块的首地址的指针
size: 每个要读/写的数据块的大小(字节数)
nitems: 要读/写的数据块的个数
fp: 要读/写的文件指针
fread与fwrite 一般用于二进制文件的输入/输出
格式化I/O:fprintf fscanf
函数名: fprintf
功 能: 按格式对文件进行I/O操作
用 法: int fprintf(FILE *fp,const char *format[,argument,…]);
返 值: 成功,返回I/O的个数;出错或文件尾,返回EOF;
函数名: fscanf
功 能: 按格式对文件进行I/O操作
用 法: int fscanf(FILE *fp,const char *format[,address,…]);
返 值: 成功,返回I/O的个数;出错或文件尾,返回EOF;
几个概念
a.文件位置指针-----指向当前读写位置的指针
b.读写方式
l 顺序读写:位置指针按字节位置顺序移动,叫~
l 随机读写:位置指针按需要移动到任意位置,叫~
文件位置:rewind ftell fseek
函数名: rewind
功 能: 重置文件位置指针到文件开头
用 法: void rewind(FILE *fp);
返 值: 无;
eg:
函数名: ftell
功 能: 返回位置指针当前位置(用相对文件开头的位移量表示)
用 法: long ftell(FILE *fp);
返 值: 成功,返回当前位置指针位置;失败,返回-1L;
eg:
函数名: fseek
功 能: 改变文件位置指针的位置
用 法: int fseek(FILE *fp,long offset,int whence);
返 值: 成功,返回0;失败,返回非0值;
eg:
文件error:ferror clearerr
函数名: ferror
功 能: 测试文件是否出现错误
用 法: int ferror(FILE *fp);
返 值: 未出错,0;出错,非0;
说 明: 每次调用文件输入输出函数,均产生一个新的ferror函数
值,所以应及时测试
l fopen打开文件时,ferror函数初值自动置为0
clearerr函数
函数名: clearerr
功 能: 使文件错误标志置为0
用 法: void clearerr(FILE *fp);
返 值: 无;
说 明: 出错后,错误标志一直保留,直到对同一文件调
clearerr(fp)或rewind或任何其它一个输入输出函数
出错的检测