大家好,
我现在用匿名管道做进程间的通信,
我知道往空的管道中读数据,或往满的管道中写数据,都会造成阻塞。
有没有办法避免这个问题呢,查了一些资料,
发现可以在读的时候先调用PeekNamedPipe()看是否有数据,
那WriteFile的时候怎么解决呢,有什么函数查看管道是否满的吗?
我现在用匿名管道做进程间的通信,
我知道往空的管道中读数据,或往满的管道中写数据,都会造成阻塞。
有没有办法避免这个问题呢,查了一些资料,
发现可以在读的时候先调用PeekNamedPipe()看是否有数据,
那WriteFile的时候怎么解决呢,有什么函数查看管道是否满的吗?
希望有经验的高手帮我解决下这个难题,非常感激。
匿名管道不允许异步操作,所以如在一个管道中写入数据,且缓冲区已满,那么除非另一个进程从管道中读出数据,从而腾出了缓冲区的空间,否则写入函数不会返回
1 这是一个同步和异步操作的问题,管道操作你可以看作是文件操作,在文件操作中会面临同样的问题,所以你可以选择异步函数,比如ReadFileEx和ReadFileEx。
2 管道的默认大小是4K,也就是说,如果你写8K的内容,则写入了4K,然后WriteFile函数阻塞,直到有人把内容读走,然后继续写剩余的4K。