IO进程线程总结 1

1.文件IO 与标准IO 的区别:

文件IO

        1)文件IO是由系统提供的基本IO函数,是和系统绑定的,又称之为系统调用。

        2)文件IO的可移植性比较低,因为不同的操作系统有不同的文件IO。

        3)文件IO涉及到CPU从用户空间切换到内核空间,C代码调用汇编指令,属于一种 耗时操作,应该尽量减少对文件IO的调用。

标准IO

        1)标准IO是根据ANSI标准,对文件IO进行二次封装。

        2)提高代码的可移植性,复用性;

        3)提高输入输出的效率(设置一个缓冲区,缓冲区满或者满足一定条件后,调用文件IO,陷入内核,由内核完成对硬件的操作,大大减少了对文件IO的调用)。

区别一:是否有缓冲机制。标准IO有缓冲(全缓冲、行缓冲、不缓冲),文件IO无缓冲
区别二:函数来源不同,也就是生产厂家不同。标准IO来自于标准c库,文件IO来自于LINUX内                    核,系统调用。
区别三:这两种IO操作文件的入口不一样。标准IO操作的文件入口是文件流,文件IO操作的文件                  入口是文件描述符。
区别四:标准IO是凌驾于所有操作系统之上的IO,而文件IO是跟操作系统有关的。
 

2.缓冲区的分类、大小、操作对象、刷新机制:

        标准IO 的数据内容,都是先存放在缓冲区,然后刷新到文件中。

i.全缓冲

操作对象

普通流指针(用fopen函数打开的流指针),FILE*fp指针会去维护一个4K大小的缓冲区;

大小

4K = 4*1024byte = 4096byte

刷新缓冲区机制

  1. 缓冲区满

  2. 调用fflush函数强制刷新

  3. 关闭流指针 fclose(fp);

  4. 主函数调用return退出;

  5. 调用exit函数

  6. 读写转换

ii.行缓冲

操作对象

stdin(标准输入) stdout(标准输出)

大小

1K = 1024byte

刷新缓冲区机制

  1. 缓冲区满

  2. 调用fflush函数强制刷新

  3. 关闭流指针 fclose(fp);

  4. 主函数调用return退出;

  5. 调用exit函数

  6. 遇到'\n'字符

  7. 读写转换

iii.无缓冲

操作对象

标准错误输出 stderr

大小:0

perror函数调用的就是stderr流指针;

3.文件描述符的本质:

        当尝试打开一个文件的时候,系统会自动给这个文件编上一个编号,这个编号就是文件描述符,通过文件描述符来描述这个文件。(无论是用标准IO 还是文件IO)

        文件描述符在用户空间,可以帮助 io文件函数(标准文件函数)实现对文件的读写。

4.特殊的流指针,特殊的文件描述符:

5.静态库和动态库的区别、优缺点:

二者的不同点在于代码被载入的时刻不同。

  • 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库,因此体积较大,但移植方便。
  • 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此存储、运行占存小,但在程序运行时还需要动态库存在,移植性较差。

动态库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值