Skip to content

Latest commit

 

History

History
 
 

16-关于I⁄O流分离的其他内容

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

关于I/O流分离的其他内容

分离I/O流

有I/O工具可以区分二者,无论使用何种方法,都可以认为分离了I/O流。

2次I/O流分离

  • 第一次:在这里,通过fork复制出一个文件描述符,以区分输入和输出中使用的文件描述符。
  • 第二次:在这里,通过2次fdopen,创建了读模式FILE指针和写模式FILE指针。

分离“流”的好处

上述第一次分流:

  • 通过分开输入过程(代码)和输出过程降低实现难度
  • 与输入无关的输出操作可以提升速度

第二次分流:

  • 为了将FILE指针按读模式与写模式加以区分
  • 可以通过区分读写模式降低实现难度
  • 通过区分I/O缓冲提高缓冲性能

“流“分离带来的EOF问题

对于文件描述符,我们可以通过shutdown半关闭客户端的输出流来传递EOF,而对基于fdopen的“流”就不一样了。

文件描述符的复制和半关闭

通常,我们的读模式FILE指针与写模式FILE指针都是基于同一文件描述符创建的,那么针对任一FILE结构体指针调用fclose()都会关闭该文件描述符,从而终止套接字。要想达到半关闭的状态,可以复制一份文件描述符。

复制文件描述符

这里的复制是指:为了访问同一文件或套接字,再创建出另一个文件描述符。

文件描述符的复制通过dupdup2函数调用完成:

#include <unistd.h>
int dup(int fildes);
int dup2(int fildes, int fildes2);	// dup2可指定复制的文件描述符整数值

返回成功返回复制的文件描述符
    失败-1