有I/O工具可以区分二者,无论使用何种方法,都可以认为分离了I/O流。
上述第一次分流:
- 通过分开输入过程(代码)和输出过程降低实现难度
- 与输入无关的输出操作可以提升速度
第二次分流:
- 为了将
FILE
指针按读模式与写模式加以区分 - 可以通过区分读写模式降低实现难度
- 通过区分I/O缓冲提高缓冲性能
对于文件描述符,我们可以通过shutdown
半关闭客户端的输出流来传递EOF
,而对基于fdopen
的“流”就不一样了。
通常,我们的读模式FILE
指针与写模式FILE
指针都是基于同一文件描述符创建的,那么针对任一FILE
结构体指针调用fclose()
都会关闭该文件描述符,从而终止套接字。要想达到半关闭的状态,可以复制一份文件描述符。
这里的复制是指:为了访问同一文件或套接字,再创建出另一个文件描述符。
文件描述符的复制通过dup
或dup2
函数调用完成:
#include <unistd.h>
int dup(int fildes);
int dup2(int fildes, int fildes2); // dup2可指定复制的文件描述符整数值
返回:
成功:返回复制的文件描述符
失败:-1