文件系统-重定向
ls -a -l > myfile
- > myfile:这是输出重定向操作符,它会将 ls -a -l 命令的输出结果,覆盖写入到名为 myfile 的文件中。如果 myfile 不存在,就创建它;如果已存在,就清空原内容后写入新内容。
ls -a -l >> myfile
- >> myfile:这是追加输出重定向操作符,它会将 ls -a -l 命令的输出结果,追加到 myfile 文件的末尾 。如果 myfile 不存在,会先创建文件再写入内容;如果已存在,则不会清空原内容,而是直接在文件尾部添加新输出内容。
cat < file.txt
- < file.txt:这是输入重定向操作符,它会将 file.txt 文件的内容作为 cat 命令的输入,也就是让 cat 命令读取 file.txt 文件并输出其内容到终端。 不过这种写法不是很常见,常规写法是 cat file.txt ,效果是一样的,都是读取并显示 file.txt 的内容。
应该知道linux下一切皆文件:所以文件描述符的前三个位置是用来存储in,out,err但是当你关闭了其中一个后,再次打开新的文件就会优先选择下标低的位置!
这个图也可以看出重定向的原理。图中的dup2函数是一种复制函数。它也用于重定向!
关于重定向的应用:下面函数是把一个程序中的错误码输出和正确输出分开写进两个日志!
缓冲区:
切记write接口它会把它的数据放进系统缓冲区,然后系统缓冲区再把数据根据自己的刷新策略交给磁盘!
关于上面这个图的c缓冲区,它是用户级别不是系统级别因为语言层都是用户级别
进程退出会强制刷新!
正常打印是遇到\n是行刷新!,但是当你进行一个文件重定向输入的时候它会会改为全缓冲!
缓冲区的本质就是一段连续的内存空间,起到平衡数据产生和处理速度差异,减少I/O操作次数等作用!
这里的fork一旦出现操作系统就会生成一个子进程,当你有了子进程的也就意味着你发生了写时拷贝,要知道的是写时拷贝也是会拷贝缓冲区里的内容的。所以就会出现打印到文件里面会发现有两遍缓冲区的内容!!!