目录
为什么close(fd1)之后还能向log.txt写入数据?
前言
重定向
实验一
观察下面代码
为什么log.txt文件的文件描述符是1
为什么向stdout打印的信息也出现在文件中
实验二
用户级缓冲区
为什么要有用户级缓冲区
系统调用
dup
为什么close(fd1)之后还能向log.txt写入数据?
dup2
int dup2(int oldfd, int newfd);
头文件:<unistd.h>
oldfd:旧的文件描述符
newfd:新的文件描述符
函数返回值,成功返回 newfd,失败返回-1
缓冲区
观察现象
测试1
测试2
测试3
测试4
现象解释
现象1 解释
现象2解释
现象3解释
现象4解释
缓冲区的刷新策略
用户级缓冲区与OS的关系
C语言文件操作向磁盘文件写入数据的过程是:程序运行,进程通过 fwrite 等函数将数据拷贝到缓冲区中,然后再由缓冲区以某种刷新方式刷新 (写入) 到磁盘文件中;
并不是直接将数据写入到磁盘文件中的(用户级语言级缓冲区在用户部分),这个过程还要经过操作系统处理,然后数据才写入磁盘的文件中;
实现一个缓存区
myStdio.h
myStdio.c
testmyStdio.c