内核态与用户态:
用户态如何切换到内核态?
发起系统调用。fwrite write read memcpy(中间两个是系统调用)
重定向:改变数据流向,将写入指定文件的数据,改变之后写入到另外一个文件
重定向指的是描述符的重定向—因为描述符并没有改变,改变的是描述符所对应的文件信息(1号座位的故事)
如何实现重定向:
1)通过close实现
2)还可以通过重定向接口实现:dup2(int oldfd ,int newfd)。 让newfd也指向了oldfd所指的文件,如果newfd本身也打开了一个文件,则关闭newfd所指向的文件,此时newfd和oldfd都指向了oldfd所指向的文件
minishell中的重定向实现:
Ls -l >> test.txt
在命令字符串中若有重定向符号
追加重定向
清空重定向
如果遇到符号,则从符号其实位置进行截断,前边是命令,后边是重定向文件
字符串检测>>:重定向符号之前是命令及参数,按照原先解析方式进行解析即可。
重定向符号>>之后,有要重定向的文件名称
在子进程中,进行程序替换之前
按照重定向方式(追加/清空)打开文件,dup2(fd,1)
因为ls浏览目录的内容—实际上就是将目录中的文件名称打印到标准输出
重定向的操作就是,将要打印到标准输出的数据写入到新文件中
因此子进程的操作就是:打开新文件–》标准输出重定向dup2()