所以我遇到了一个非常令人沮丧的问题......基本上我试图在两个不同的程序之间传输数据。生产者程序将数据发送到stdout。消费者程序通过_popen()启动生产者然后使用fread()从该进程读取......这最初起作用,但是在可能的15次循环迭代之后,消费者每次都开始读取0个字节(即使生产者应该仍在输出数据。)
我注意到,如果我调整数据速率很多,我就不会遇到这个问题......但是这不是一个真正的选择,因为在真实场景中,数据会是未经压缩的视频通过ffmpeg传输。
这是我的消费者计划:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() {
FILE * in = _popen("Pipe.exe", "r");
if(in == NULL){
printf("ERROR\n");
exit(0);
}
int stride = 163840;
char * buffer = (char*)malloc(stride);
int bytesRead;
while(true){
bytesRead = fread(buffer, 1, stride, in);
printf("%i\n", bytesRead);
Sleep(10);
}
}
我的制作人计划:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() {
int stride = 163840;
char * buffer = (char*) malloc(stride);
char value = 0;
while(true){
// This just changes the data for every loop iteration
for(int i = 0; i < stride; i++){
buffer[i] = value;
}
value = value == 255 ? 0 : value + 1;
fwrite(buffer, 1, stride, stdout);
Sleep(10);
}
}