最近做一个 Video Capture 的测试程序,从 MSDN 现学,代码重写改了3遍,从 VFW 到 DirectShow 再到 Media Foundation,输出一直有问题。
今天终于找到原因了。
A.exe | B.exe
我在 A.exe 用 fwrite 把数据写到 stdout,然后 B.exe 从 stdout 读数据,就在这里会有数据丢失。A.exe > test.data 仍然不行。
今天试着不往 stdout 写了,直接写到文件里,居然一点错误都没有。好吧,不知道 Windows 下的 pipe 有什么问题。难道是不支持 binary mode 吗?又或者buffer 太小,超过了就丢失数据?为了让 B.exe 能够读数据,只能建立 Named Pipe 了。Linux 下可以直接用 fifo,WIndows 下就用 CreateNamedPipe 吧,无非是多用两个 API 而已。