open()会返回一个文件描述符
其实就是个int
我们第一次调用open() 返回的数字是3
因为0,1,2都已经被占用了
0—stdin,标准输入流
1—stdout,标准输出流
2—stderr,标准错误流
下面搞点例子理解一下:
1、标准输出
ls > l.txt
这就是把ls 的内容通过管道传输给l.txt
而ls 的内容对应的即标准输出stdout
像我们print()出来的内容也是在标准输出中
所以我们大可以用dup2()把标准输出与具体文件连接在一起
然后print()可以直接输出到文件里
2、标准输入
这样一来,标准输入大概也有一定认识了
对的,就是scanf()
我们同样可以借助dup2(),把stdin和具体文件连接起来
然后直接敲键盘输入内容到文本里
3、标准错误
至于stderr则是报错了
就我们运行c程序时报错时出来的错误信息
我们同样可以把他连接到具体文件
然后,就可以把错误信息保存起来了
最后,再提提多进程下的文件描述符
确实,子进程可以把全部变量都给赋值出来
但是,文件描述符本质就是一个int而已
进程有多个,但是文件描述符对应的像stdin,stdout,stderr 这样的文件流是唯一的
意思就是,进程可以把变量复制多份
但是,上面那些文件流其实是并不复制的,独一份~
也就是说,你在子进程移动文件指针的时候,主进程也会受到影响