C 允许管道读取碎片消息

C 允许管道读取碎片消息,c,winapi,pipe,named-pipes,C,Winapi,Pipe,Named Pipes,如何防止碎片消息通过命名管道发送。它是否像while循环检查错误或断开连接一样简单。。。。或者还有更多吗? (使用winapi,在C中命名管道) 谢谢。有两个因素会影响邮件是否可以分段: 消息长度 阅读长度 您必须以原子方式编写消息—整个消息只需一次编写 如果消息长度超过管道缓冲区大小(不需要太大),则消息将被分段为一个位序列。第一个将填充缓冲区,接下来的几个将是缓冲区大小,最后一个将是剩余的任何内容 你也必须以原子的方式来阅读信息。也就是说,你的阅读量必须足够大,以便一次阅读完整的信息。如果您

如何防止碎片消息通过命名管道发送。它是否像while循环检查错误或断开连接一样简单。。。。或者还有更多吗?
(使用winapi,在C中命名管道)


谢谢。

有两个因素会影响邮件是否可以分段:

  • 消息长度
  • 阅读长度
  • 您必须以原子方式编写消息—整个消息只需一次编写

    如果消息长度超过管道缓冲区大小(不需要太大),则消息将被分段为一个位序列。第一个将填充缓冲区,接下来的几个将是缓冲区大小,最后一个将是剩余的任何内容

    你也必须以原子的方式来阅读信息。也就是说,你的阅读量必须足够大,以便一次阅读完整的信息。如果您有一个读卡器进程(或线程),那么您可能可以读取(比如)消息开头的2字节长度,然后以原子方式读取其余数据。(4字节的长度可能会过大;最大缓冲区大小通常在512-5120的范围内,尽管它会因系统而异。)

    复杂的情况包括,如果有多个进程可以在管道上写入,那么在发送超大消息时,其他进程可能会设法将其数据交错插入管道

    严格来说,这适用于基于Unix的系统。然而,据我所知,WinAPI在这方面与Unix密切相关