我使用我的C程序将二进制数据传输到ImageMagick:
inbuf = popen(string, "wb");
setbuf(inbuf, NULL); /// !!! ///
fwrite(buffer, frame, 1, inbuf);
pclose(inbuf);
ImageMagick并不总是接收Windows上的所有数据(mingw)。如果没有setbuf命令(禁用缓冲区),它会收到更少的数据,并且Linux(gcc)上也会出现问题。
当我将相同的缓冲区转储到文件时,一切正常,所有数据都写入磁盘,我甚至不必禁用缓冲:
outbuf = fopen("temp\\tune.gray", "wb");
fwrite(buffer, frame, 1, outbuf);
fclose(outbuf);
我发现当我发送奇数个字节时会出现问题:)当我发送偶数时,一切正常。我尝试不是以批量模式写入数据,而是将缓冲区拆分为较小的部分,甚至尝试逐字节发送数据 - 它没有帮助。有什么想法吗?
答案 0 :(得分:0)
fwrite返回成功写入的总字节数。您可以编写一个循环来测试实际写入的字节数,然后继续执行下一个写操作(从成功写入的位置),直到成功写入整个缓冲区。