0

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

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

4

1 回答 1

0

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

于 2012-09-20T07:46:07.860 回答