目录:
1.追加实现重定向
2.dup2系统调用
3.程序替换是否会影响我们曾经打开的文件呢??
----------------------------------------------------------------------------------------------------------------------------
1.追加实现重定向
上一章我们提到了重定向的原理,可重定向的分为输出重定向、输入重定向、还有追加重定向
上面是输出重定向的原理,那追加重定向呢?????
追加重定向进了log.txt文件当中
那么输入重定向呢???
2.dup2系统调用
那么按照上面的说法,我要实现输出重定向是不是得每次把1关掉,然后在打开文件这样的去重定向吗????????
那当然不用了,我们有一个系统调用,帮助我们完成重定向的工作
我们来实验一下重定向标准输出
我们来重定向标准输入
3.程序替换是否会影响我们曾经打开的文件呢??
绝对是不会影响的
那么子进程会共享文件描述符吗????
当我fork()创建的时候,也要形成新的task_struct,也要有自己独立的files_struct,子进程的pcb是以父进程为模板拷贝的,files_strcut也要拷贝过来,是两份完全一样的内容
但是的打开的文件只会有一份,父进程和子进程指向的是同一份文件
父进程如果曾经打开了标准输入、标准输出、标准错误???子进程也继承下去!!!
为什么我们的所以进程都会默认打开标准输入输出错误???
原因是因为我们命令行上所起的所有进程的父进程都是bash,bash是命令行进程啊,命令行当然要打开标准输入,标准输出,标准错误啊,子进程默认也就继承下去了