C Primer Plus阅读–章节13-15
C语言提供两种文件模式
- 文本模式
- 二进制模式
I/O级别
- 底层I/O:使用操作系统提供的基本I/O服务。
- 标准高级I/O:使用C的标准包和stdio.h头文件定义
putc()和getc()
- getc():从文件中读取一个字符
- getc():将字符写入文件
fseek()和ftell()的工作原理
- fseek():将光标移动到任意位置,如果正常则返回值为0,不正常的话返回值为-1
- 第一个参数:FILE指针,指向待查找文件
- 第二个参数:偏移量,必须是一个long类型的值(long一般等价为int),可以为正、负、0
- 第三个参数:模式。(SEEK_SET、SEEK_CUR、SEEK_END)
2.ftell():返回光标的偏移量,long类型 - ftell(fp)
处理大文件的函数:fgetpos()和fsetpos()函数
标准I/O的工作原理
- 调用fopen()打开文件,创建缓冲区(读写模式下会创建两个缓冲区)及一个包含文件和缓冲区的数据结构。该结构通常包含一个指定流中当前位置的文件位置指示器,还包含错误和文件结尾的指示器,一个指向缓冲区开始处的指针,一个文件标识符和一个计数器(统计实际拷贝进缓冲区的字节数)
- 调用定义在stdio.h中的输入函数
setvbuf():设置缓冲区大小
二进制I/O
- fread()
- fwrite()
变量名和标记的名称可以相同(即命名空间不同,标记之间的命名空间相同,标记指的是结构体、Union和枚举类型)
typedef简介
与define类似,两者之间的不同:
- typedef创建的符号名只受限于类型,不能用于值。
- typedef由编译器解释,不是预处理器的工作。
- typedef比#define更加灵活
函数和指针
- 函数指针通常用作另一个函数的参数,告诉函数该使用哪一个函数。
- 函数指针:
- 指向函数的指针存储这函数代码的起始处地址。
- 声明一个函数指针时必须声明指针所指向的数据类型。要指明函数的返回值类型和形参类型。
void (*pf)(char *);//指向函数的指针,返回值类型为void,形参列表为char *类型
位字段
确定每个字段的宽度,以下结构宽度为4位,因此每一个字段只能表示0或者1
struct{
unsigned int autfd:1;
unsigned int bldfc:1;
unsigned int undln:1;
unsigned int itals:1;
}prnt;
对齐特征(C11)
- _Alignof运算符:将变量指定为对应类型长度的进行对齐
size_t d_align = _Alignof(float);//假设d_align的值为4,float的对齐要求为4
_Alignas(double) char c1;
_Alignas(8) char c2;