C popen fwrite缓冲区问题

时间:2012-09-20 07:06:33

标签: c imagemagick mingw stdin popen

我使用我的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);

我发现当我发送奇数个字节时会出现问题:)当我发送偶数时,一切正常。我尝试不是以批量模式写入数据,而是将缓冲区拆分为较小的部分,甚至尝试逐字节发送数据 - 它没有帮助。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

fwrite返回成功写入的总字节数。您可以编写一个循环来测试实际写入的字节数,然后继续执行下一个写操作(从成功写入的位置),直到成功写入整个缓冲区。