标准IO函数:软件级别的操作函数
fopen:打开一个文件
#include
FILE *fopen(const char *path, const char *mode);
path:打开文件的路径
mode:打开文件的权限
r:只读,文件定位在开头
r+:读写,文件定位在开头
w:只写,并且会将内部内容清空,文件定位在开头,文件不存在会被创建
w+:读写,文件不存在会被创建,文件定位在开头
a:只写,文件定位在末尾,如果不存在会被创建
a+:读写,文件定位在末尾,如果不存在会被创建
返回值:
成功返回一个文件指针
失败返回NULL
fclose:关闭文件指针
#include
int fclose(FILE *stream);
stream:文件操作指针
返回值:
成功返回0
失败返回EOF
fread:读取文件内容
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr:读取的内容存放到哪里
size:每一块数据的大小
nmemb:多少块数据
stream:文件指针
返回值:
函数正常返回读取到的块数,以下这几种情况将会返回不等于块数的返回值:
A、文件读到末尾了,剩余的内容不够读满那么多块,那他就会返回读到多少块整块,而后面不满一块的内容,虽然已经读了,但是他不会记录在总数中
调用feof判断文件是否到达末尾
B、文件读取出错了
调用ferror判断文件是否出错
fwrite:写入数据到文件中
size_t fwrite(const void *ptr, size_t size, size_t nmemb,
FILE *stream);
ptr:写入的内容
size:每一块数据的大小
nmemb:多少块数据
stream:文件指针
返回值:
函数正常返回写入的块数,以下这一种情况将会返回不等于块数的返回值:
文件写入出错了
调用ferror判断文件是否出错
ferror函数:判断文件出错
int ferror(FILE *stream);
判断文件操作是否出错
如果出错返回真(非0值)
feof:判断文件操作是否到达文件末尾
int feof(FILE *stream);
判断文件操作是否到达文件末尾
如果到达则返回真
clearerr:
void clearerr(FILE *stream);
清楚文件操作中的错误标志,以不至于每次调用ferror都判断出错
ftell:测量当前位置到文件开头的距离
long ftell(FILE *stream);
fseek:偏移文件的操作位置
int fseek(FILE *stream, long offset, int whence);
stream:文件指针
offset:偏移多少个字节
whence:从哪里开始偏移
SEEK_SET, SEEK_CUR, or SEEK_END
返回值:
成功返回0
失败返回-1
rewind:将操作位置直接定位到文件开头
void rewind(FILE *stream);
fdopen:通过文件描述符调用标准IO的借口,返回一个文件指针
FILE *fdopen(int fd, const char *mode);
fd:文件描述符
mode:打开的权限(同fopen)
注意:这个权限应该跟open打开的权限一致
返回值:
返回一个操作指针
freopen:重新一个文件打开
FILE *freopen(const char *path, const char *mode, FILE *stream);
用于重新用新的权限打开一个一样的文件
path:文件路径
mode:文件的权限
stream:文件之前打开的文件指针
返回值:
返回一个新的文件操作指针
失败返回NULL
fileno:获取对应的文件指针的文件描述符
int fileno(FILE *stream);
fflush:清除缓冲区
fprintf:
打印指定内容到文件指针当中
int fprintf(FILE *stream, const char *format, ...);
stream:你想要打印的文件指针
format:数据格式,之后这段内容会打印到stream当中
...:变参函数的参数
dprintf:打印指定内容到文件描述符当中
int dprintf(int fd, const char *format, ...);
fd:你想要答应的文件描述符
format:数据格式,之后这段内容会打印到stream当中
...:变参函数的参数
#include
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vdprintf(int fd, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
以上函数跟printf等函数用法跟意义一致,只是他们用配合变参函数的参数列表来引用
va_list:这个是变参函数的数据指针(链表头)
fscanf:从指定的文件指针中获取格式化数据
int fscanf(FILE *stream, const char *format, ...);
stream:文件指针
format:指定格式
...:存入的参数(地址)
int fgetc(FILE *stream);
从steam中获取一个字符
char *fgets(char *s, int size, FILE *stream);
从stream专用获取一行(如果一行超过size的大小,则size这么大)存放到s中
int getc(FILE *stream);
从steam中获取一个字符(宏函数,最好用fgetc)
int getchar(void);
从键盘获取一个字符
int ungetc(int c, FILE *stream);
反向往stream中扔入一个字符到steam的缓冲区中
int fputc(int c, FILE *stream);
往steam中写入一个字符c
int fputs(const char *s, FILE *stream);
往stream中写入s数据
int putc(int c, FILE *stream);
往steam中写入一个字符c
int putchar(int c);
往屏幕输出一个字符c
int puts(const char *s);
往屏幕输出s数据
课后习题
目录索引(将目录里面的所有文件打印出来)