我们知道TCP不保留消息边界,但UDP却可以。那么对于管道和FIFO呢?例如,假设我们有一个服务器和两个客户端在同一主机上,服务器使用已知路径名创建一个FIFO,并打开此FIFO以进行读取。客户端1和客户端2都打开此FIFO以进行写入。然后发生以下事件:
1. 客户端1向FIFO写入100字节。 2. 客户端2向FIFO写入100字节。 3. 服务器使用足够大的缓冲区读取此FIFO,例如: ``` char buf[1024]; read(fifofd, buf, sizeof(buf)); ``` 我的问题是: 第3步会返回多少数据?它只会返回客户端1发送的前100个字节,因此我们不必担心消息边界吗?还是它会返回所有200字节,因此我们必须将来自客户端1的消息与来自客户端2的消息分开?
1. 客户端1向FIFO写入100字节。 2. 客户端2向FIFO写入100字节。 3. 服务器使用足够大的缓冲区读取此FIFO,例如: ``` char buf[1024]; read(fifofd, buf, sizeof(buf)); ``` 我的问题是: 第3步会返回多少数据?它只会返回客户端1发送的前100个字节,因此我们不必担心消息边界吗?还是它会返回所有200字节,因此我们必须将来自客户端1的消息与来自客户端2的消息分开?