Windows namedpipe最大限制

时间:2016-12-11 03:47:55

标签: c++

我的项目中出现了错误,我发现它可能是通过windows namedpipe传递的大消息。

process1产生大约80 KB的消息,并且我有一个namepdpipe附加到它的标准输出。

在进程2从namedpipe读取消息后,我发现消息不完整。

伪代码就是这样,

char buffer[4096] ;
string msg ;
while( !namedpipe.isEmpty() ) {
    int length = namedPipe.read(buffer, 4096) ;
    msg.append(buffer, length) ;
}

在google上有关namedpipe的一些信息后,我发现namedpipe的限制为65535字节。

80KB的消息将超出限制。

但是当我在读取之前插入Sleep(1000)时。

char buffer[4096] ;
string msg ;
while( !namedpipe.isEmpty() ) {
    Sleep(1000) ;
    int length = namedPipe.read(buffer, 4096) ;
    msg.append(buffer, length) ;
}

信息正常并完整。

我认为在睡眠时刻,系统会请求命名管道的内存。

因此namedpipe只能确保使用65535字节。

我所取得的进展是否正确?

1 个答案:

答案 0 :(得分:0)

isEmpty()不是消息指示符的结尾。

您应该将循环终止条件更改为在达到预期的消息长度时终止。

管道中的最大数据量在创建时通过nInBufferSizenOutBufferSize参数定义到CreateNamedPipe。请参阅那里的备注部分。

睡觉实际上是浪费时间。