所使用的管道和FIFO的例子都是字节流I/O模型,这是Unix原生的I/O模型模型,这种模型无记录边界,也就是读写操作不检查数据。如:从某个FIFO读100个字节的进程无法判定该FIFO写入的这100个字节的进程执行了单个100个字节的写操作,5个20字节的写操作等,或写入35个字节后在写入65个字节,这种数据是字节流,系统不对他作解释,他如果需要某种解释,读进程和写进程就得同意这种解释,并亲自去做。
传送的消息加上某种结构,当数据由长度可变消息构成时,读者必须知道这些消息的边界以判定何时读出单个消息
- 带内特殊终止序列:许多Unix用换行符来分割每个消息,写进程给每个消息加个换行符,读进程每次读出一行,这种方法在数据中任何出现分隔符都做转义处理也即是以某种方式把他们标志成数据而不是作为分隔符。(http,ftp后跟双字节序列(CR/LF)分割文本记录
- 每个记录前冠以长度,不需通过转义字符来分割数据,不需要扫描整个数据来寻找每个记录结束的位置
- 每次连接一个记录:应用程序关闭与对端的连接(网络应用为TCP连接,IPC为IPC连接)来指示一个记录的长度,为每个记录创建一个新的连接,HTTP1.0使用这一技术
用标准I/O函数fdopen将标准I/O与pipe返回的某个已打开的文件描述符关联