✏ 1、函数
🖋 1.1、二进制IO
size_t
fread( void *buffer
, size_t size
, size_t count
, FILE
*stream
);
size_t fwrite
( void *buffer
, size_t size
, size_t count
, FILE
*stream
);
buffer是用于保存数据的内存指针,size是缓冲区字节数,count是读入/写入的元素数,stream是目标流。
🖋 1.2、文件访问
FILE
*fopen( const char *filename
, const char *mode
)
FILE
*freopen( const char *filename
, const char *mode
, FILE
*stream
)
int fflush(FILE
*stream
)
int fclose(FILE
*stream
)
打开模式含义
r或rb以只读方式打开一个文本文件(不创建文件,若文件不存在则报错)w或wb以写方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)a或ab以追加方式打开文件,在末尾添加内容,若文件不存在则创建文件r+或rb+以可读、可写的方式打开文件(不创建新文件)w+或wb+以可读、可写的方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)a+或ab+以添加方式打开文件,打开文件并在末尾更改文件,若文件不存在则创建文件
注意:b表示二进制模式,二进制模式只在window下有效,在linux中是无效的。linux下所有的文本文件都以\n结尾。在window下二进制读取模式时可以获得\r\n。
🖋 1.3、非格式化IO
int fgetc(FILE
*stream
)
int fputc(int char, FILE
*stream
)
char *fgets(char *str
, int n
, FILE
*stream
)
int fputs(const char *str
, FILE
*stream
)
char *gets(char *str
)
int puts(const char *str
)
int getc(FILE
*stream
)
int putc(int char, FILE
*stream
)
int getchar(void)
int putchar(int char)
int ungetc(int char, FILE
*stream
)
🖋 1.4、格式化IO
int fscanf(FILE
*stream
, const char *format
, ...)
int fprintf(FILE
*stream
, const char *format
, ...)
int vfprintf(FILE
*stream
, const char *format
, va_list arg
)
int vprintf(const char *format
, va_list arg
)
int vsprintf(char *str
, const char *format
, va_list arg
)
int scanf(const char *format
, ...)
int printf(const char *format
, ...)
int sscanf(const char *str
, const char *format
, ...)
int sprintf(char *str
, const char *format
, ...)
scanf:解包
遇到空格、回车、\0、\t、\v、\f。均结束提取(简单地说就是空白字符与\0都会结束sscanf的提取)。sscanf(buf, "%c3%c", &ch1, &ch2); buf与format字符串中有匹配项可以跳过,比如3。跳过数据:%*d %*s指定提取宽度:%3s %*2s指定提取范围:[a~zA~Z0~9] [aBc]取反%[^a]
printf:组包
格式化字符串字符串连接把数字转成字符串
🖋 1.5、文件定位
int fseek( FILE
*stream
,long offset
,int origin
)
fseek函数设置流 stream 的文件位置,后续的读写操作将从新位置开始。对于二进制文件,此位置被设置为从origin开始的第offset个字符处。Origin的值可以为SEEK_SET(文件开始处)、SEEK_CUR(当前位置)或 SEEK_END(文件结束处) 。对于文本流,offset必须设置为 0,或者是由函数 ftell 返回的值(此时 origin 的值必须是 SEEK_SET)。 fseek函数在出错时返回一个非 0 值。
注:fseek()函数出错时返回的是非零值,不一定是-1。
long ftell( File
*stream
)
ftell函数返回stream流的当前文件位置,出错时该函数返回-1L。
注:一般情况下,这个-1L与-1没有区别,但还是注意为好。
void rewind( FILE
*stream
)
rewind(fp)函数等价于语句fseek(fp, 0L, SEEK_SET);clearerr(fp);的执行结果。(clearerr函数见下文)
int fgetpos(FILE
*stream
,fpos_t
*ptr
)
fgetpos 函数把 stream 流的当前位置记录在*ptr 中,供随后的 fsetpos 函数调用使用。若出错则返回一个非 0 值。
int fsetpos(FILE
*stream
,const fpos_t
*ptr
)
fsetpos 函数将流 stream 的当前位置设置为 fgetpos 记录在*ptr 中的位置。若出错则返回一个非 0 值。
🖋 1.6、错误处理函数
当发生错误或到达文件末尾时,标准库中的许多函数都会设置状态指示符。这些状态指示符可被显式地设置和测试。另外,整型表达式 errno(在中声明)可以包含一个错误编号,据此可以进一步了解最近一次出错的信息。
void clearerr(FILE
*stream
)
int feof(FILE
*stream
)
int ferror(FILE
*stream
)
void perror(cinst
char *s
)
perror(s)函数打印字符串 s 以及与 errno 中整型值相应的错误信息,错误信息的具体内容与具体的实现有关。该函数的功能类似于执行下列语句:
fprintf(stderr, "%s: %s\n", s
, "error message");
🖋 1.7、文件管理
int remove(const char *filename
)
int rename(const char *old_filename
, const char *new_filename
)
FILE
*tmpfile(void)
✏ 2、变量和宏
🖋 2.1、变量
变量类型描述
size_t这是无符号整数类型,是sizeof关键字的结果。FILE这是一种适合于存储文件流信息的对象类型。
🖋 2.2、常用的宏
宏描述
NULL这个宏是一个空指针常量的值。EOF该宏是一个负整数,表示已经到达文件结束。stderr, stdin, and stdout这些宏是指向与标准错误、标准输入和标准输出流对应的文件类型的指针。
✏ 3、格式字符
类型转换字符
int%d(十进制)int%o(八进制无前缀)int%#o(八进制带前缀0)int%x(十六进制无前缀)int%#x(十六进制带前缀0x)int%#X(十六进制带前缀0X)unsigned int%ulong%ld(十进制)long%lo(八进制无前缀)long%lx(十六进制无前缀)unsigned long%lulong long%lldunsigned long long%llushort%hd(十进制)short%ho(八进制)short%hx(十六进制)char%cfloat%f(十进制计数法)double%f(十进制计数法)float%a(十六进制计数法)double%a(十六进制计数法)float%e(指数计数法)double%e(指数计数法)字符串%s
✏ 4、标准文件指针
stdin、stdout、stderr 就是三个文件流指针,分别表示标准输入,输出,错误输出。Linux中0就是stdin,表示输入流,指从键盘输入,1代表stdout,2代表stderr,1、2默认是显示器。
三个变量都是一个打开的文件的句柄,系统会为每一个进程打开这三个文件,stdout,stderr一般关联到终端,stdin一般关联到键盘。
写作的初衷是希望能和大家一起学习进步,有错误之处,还望及时指出,编程不易,与君共勉!