1.对于标准I/O库,操作是围绕流进行的。所谓的流,就是一种信息的转换,包括输入流,输出流,错误。即stdin,stdout。error。
【流的定向】读写的字符是多字节的就是宽定向,单字节的就是字节定向。字节定向可以进行清除及修改:
【更改定向类型】
freopen :清除流定向
fwide(FILE *fp, int mode) : 修改流的定向
mode:<0 字节定向 mode:>0宽定向 mode:=0 不适图设置流的定向。
【缓冲】包括三种:全缓冲,行缓冲,不带缓冲。其中,标准出错不带缓冲,打开终端设备的流是行缓冲,其他全缓冲。
【更改缓冲类型】
void setbuf(FILE *restrict fp,char *restrict buf);
buf通常全缓冲,buf与终端设备相关联是行缓冲;buf是NULL代表不缓冲
int setvbuf (FILE *restrict fp, char *restrict buf, int mode,size_t size);
用mode精准设置缓冲类型。buff是NULL代表自动分配适合长度的缓冲区。
【打开流】
1)FILE *fopen(const char *restrict pathname,const char *restrict type);
文件路径、打开模式
FILE *freopen(const char * restrict pathname,const char *restrict type, FILE *restrict fp);
文件路径、打开模式、文件指针//指定模式重新指定到另一文件,模式用于指定新文件的访问方式。把第三个参数里面内容通过type形式写入到pathname中。
FILE *fdopen(int filedes,const char *type);//取一个现存的文件描述符,并使一个标准的I/O流与该描
述符相结合。
2)type
r或rb:为读而打开 w或wb:文件截断至0长,或为写而创建。 a或ab:添加,或为写而创建
r+或r+b或rb+:为读和写而打开 w+或w+b或wb+:文件截断为0长,或为读和写而打开
a或a+b或ab+:为在文件尾读和写而打开或创建
【读和写流】类型包括:一次一个字符;一次一行;直接I/O,fread和fwrite。这两个函数长读写一个结构。
1)输入函数一次一个字符:getc,fgetc,getchar(void)
输入函数一次一行: gets(不推荐用),fgets(char *restrict buf,int n, FILE *restrict fp):换行符 和n-1为基准,
2)输出函数一次一个字符:putc(可实现为宏),fputc(一定是函数),putchar
输出函数一次一行: puts(null终止,去null加换行符),fputs(null终止,不包括null)
3.一次读或写整个结构(数组结构体等),由于其结构的特殊性,只能在同一个系统下读或写
size_t fread(void *restrict ptr, size_t size, size_t nobj, FIFE *restrict fp);
由于分页或者其他原因,此函数的返回的结果count可能小于nobj,但是不一定是出错。要再调用ferror进行判断。
size_t fwrite(const void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp);
如果返回结果小于nobj,说明出错。