基础I/O(二)
1.重定向
1.1什么是重定向
- 把本应该写到显示器上的内容,写到了文件里,这就叫做文件的重定向
- 我们再举一个追加重定向的例子
1.2重定向的原理
2.缓冲区
2.1什么是缓冲区?
- 缓冲区是语言层面提供的,由file结构体进行维护
2.2两种现象对比
- 第一种
- 第二种
- 总结:
write
系统调用接口只往文件里写了一行,但是库函数却都写了两行- 这是由于缓冲区导致的,我们平时输出到显示器上面的内容是行缓冲,而输出到文件里是全缓冲
- 如果我们
close(1)
,将标准输出关闭,1号文件描述符就变成了我们新创建的文件,所以在输入内容的时候用的是全缓冲 - 我们在其中加入了
fork()
,系统调用接口write
已经将内容写到了log.txt
当中,说明没有缓冲机制 - 但是两个库函数,是先写入缓冲区,然后创建父子进程,再分别刷新各自独立的缓冲区,这就导致输出两遍
- 进而我们可以得出结论,缓冲区机制是由语言层面提供的,并不是操作系统
- 但是操作系统也有自带的缓冲区
file *stream
的作用就是将用户级别的缓冲区,往操作系统刷新(例如调用write
接口)