Linux文件:重定向底层实现原理(输入重定向、输出重定向、追加重定向)
前言
在Linux中,操作系统会为每一个文件创建对应的描述结构体对象struct file
。该结构体中一定存在3个部分:打开文件的所有属性、文件的操作集、文件缓冲区(内存)。其中由于冯诺依曼体系决定了,无论对文件进行读操作还是写操作,都需要先将数据加载到文件缓存区!
我们在应用层进行对数据读写的操作本质上是用户缓冲区和内核数据缓冲区之间的相互拷贝!!!
一、文件描述符fd的分配规则
- 默认情况下,进程会默认打开3个文件:标准输入、标准输出、标准错误。
- 文件描述符的分配规制是:从上往下遍历查找最小的、未被使用的分别个新的文件!
二、输出重定向(>)
下面我们将标准输出文件关闭,然后创建新的文件;并向新的文件中输出一些信息。
int main()
{
close(1); //将标准输出文件显示器关闭
int fd = open("log.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);//新创建文件,fd分配为1
if(fd < 0)
{
perror("open");
return 1;
}
printf("what will happen\n");
return 0;
}