一、对缓存的操作
#include <stdio.h>
void setbuf(FILE *fp,char *buf)
void setbuffer(FILE *fp,char *buf,size_t size)
void setlinebuf(FILE *fp)
int setvbuf(FILE *fp,char *buf,int mode,size_t size)
用setvbuf就行了,mode _IOFBF,_IOLBF,_IONBF
二、流的打开与关闭
#include <stdio.h>
FILE *fopen(const char *pathname, const char *type)
FILE *freopen(const char *pathname, const char *type,FILE *fp)
FILE *fdopen(int fd, const char *type)
fopen打开一个路径名由pathname指示的文件,fopen返回FILE对象的指针,失败返回NULL
freopen在指定的流上fp指示,打开指定文件由pathname指示,流已打开先关闭。用于将指定文件打开为预定义的流:标准输入、标准输出或标准出错
fdopen,通常用于管道和网络通信获得的描述符,fdopen不会创建文件,也不会将文件截短为0
type类型
type值 | 操作文件类型 | 是否新建文件 | 是否清空原文件 | 可读 | 可写 | 读写开始位置 |
---|---|---|---|---|---|---|
r | 文本文件 | 否 | 否 | 是 | 否 | 文件开头 |
r+ | 文本文件 | 是 | 否 | 是 | 是 | 文件开头 |
w | 文本文件 | 是 | 是 | 否 | 是 | 文件开头 |
w+ | 文本文件 | 是 | 是 | 是 | 是 | 文件开头 |
a | 文本文件 | 否 | 是 | 否 | 是 | 文件结尾 |
a+ | 文本文件 | 否 | 是 | 是 | 是 | 文件结尾 |
rb | 二进制文件 | 否 | 否 | 是 | 否 | 文件开头 |
r+b或rb+ | 二进制文件 | 是 | 否 | 是 | 是 | 文件开头 |
wb | 二进制文件 | 是 | 是 | 否 | 是 | 文件开头 |
w+b 或 wb+ | 二进制文件 | 是 | 是 | 是 | 是 | 文件开头 |
ab | 二进制文件 | 否 | 是 | 否 | 是 | 文件结尾 |
a+b 或 ab+ | 二进制文件 | 否 | 是 | 是 | 是 | 文件结尾 |
三、关闭流
#include <stdio.h>
int fclose(FILE *fp)
返回,成功0,失败EOF,EOF是定义在<stdio.h>中的宏,值为-1
本地关闭无需检查,网络调用需要检查
四、流的读写
1、字符的I/O
(1)字符的输入
#include <stdio.h>
int getc(FILE *fp)
int fgetc(FILE *fp)
int getchar(void)
一次读入一个字符
#include <stdio.h>
int ferror(FILE *fp)
int feof(FILE *fp)
条件为真为非0,为假则为0
读入字符出错时,ferror为真;位于文件尾,feof为真
FILE对象为流保持两个标志,出错标志和文件结束标志,调用clearerr可以清除这两个标记
#include <stdio.h>
void clearerr(FILE *fp)
从流读取后调用ungetc将字符返回流中
#include <stdio.h>
int ungetc(int c,FILE *fp)
返回,成功返回要送回流的字符的值,出错为EOF
(2)字符的输出
#include <stdio.h>
int putc(int c,FILE *fp)
int fputc(int c,FILE *fp)
int putchar(int c)