文件


 

在线C环境:https://clin.icourse163.org/

 

格式化输?输出

2. printf和scanf的返回值

  • 读?的项目数
  • 输出的字符数
  • 在要求严格的程序中,应该判断每次调?scanf或 printf的返回值,从?了解程序运?中是否存在问题

3. ?件输?输出

?>和<做重定向

4. 输?结束

getchar读到了EOF

scanf返回?于要求读的数量

5. FILE

FILE* fopen(const char * restrict path, const char * restrict mode);

int fclose(FILE *stream);

fscanf(FILE*, ...)

fprintf(FILE*, ...)

6.打开?件的标准代码

7. fopen

8.  ?进制?件

  • 其实所有的?件最终都是?进制的
  • ?本?件??是?最简单的?式可以读写的?件
  1. more、tail
  2. cat
  3. vi
  • ??进制?件是需要专?的程序来读写的?件
  • ?本?件的输?输出是格式化,可能经过转码

9.?本 vs ?进制

  • Unix喜欢??本?件来做数据存储和程序配置
  1. 交互式终端的出现使得?们喜欢??本和计算机 “talk”
  2. Unix的shell提供了?些读写?本的?程序
  • Windows喜欢??进制?件
  1. DOS是草根?化,并不继承和熟悉Unix?化
  2. PC刚开始的时候能?有限,DOS的能?更有限,? 进制更接近底层
  • ?本的优势是?便?类读写,?且跨平台
  • ?本的缺点是程序输?输出要经过格式化,开销?
  • ?进制的缺点是?类读写困难,?且不跨平台
  • int的??不?致,??端的问题...
  • ?进制的优点是程序读写快

 10.程序为什么要?件

  • 配置
  1. Unix??本,Windows?注册表
  • 数据
  1. 稍微有点量的数据都放数据库了
  • 媒体
  1. 这个只能是?进制的
  • 现实是,程序通过第三?库来读写?件,很少直接读 写?进制?件

11. ?进制读写

12. 为什么nitem?

  • 因为?进制?件的读写?般都是通过对?个结构变量 的操作来进?的
  • 于是nitem就是?来说明这次读写?个结构变量!

13. 在?件中定位

  • long ftell(FILE *stream);
  • int fseek(FILE *stream, long offset, int whence);
  1. SEEK_SET:从头开始
  2. SEEK_CUR:从当前位置开始
  3. SEEK_END:从尾开始(倒过来)

14. 可移植性

  • 这样的?进制?件不具有可移植性
  1. 在int为32位的机器上写成的数据?件?法直接在int 为64位的机器上正确读出
  • 解决?案之?是放弃使?int,?是typedef具有明确 ??的类型
  • 更好的?案是??本

位运算

1. 按位运算

C有这些按位运算的运算符:

& 按位的与

| 按位的

~ 按位取反或

^ 按位的异或

<< 左移

>> 右移

2. 按位与 &

3. 按位或 |

4.  按位取反 ~

 

5. 逻辑运算vs按位运算

6. 左移 <<

7. 右移 >>

no zuo no die

8.输出?个数的?进制

9. 位段

  • 可以直接?位段的成员名称来访问
  1. ?移位、与、或还?便
  • 编译器会安排其中的位的排列,不具有可移植性
  • 当所需的位超过?个int时会采?多个int