以二进制模式写入标准输出最简单的方法是什么?

我一直在想出从C程序写入二进制数据到stdout的最好方法。 它在Linux上正常工作,但是当我在Windows上编译时遇到了问题,因为“\ n”被转换为“\ r \ n”。

有没有一种标准的方式写入标准输出的某种二进制模式,避免换行符? 如果没有,让Windows停止这个最简单的方法是什么?

我正在使用GCC和MinGW。

你可以使用setmode(fileno(stdout), O_BINARY)

把它包装在一个ifdef中,如果你想保持它与Linux兼容。

另见http://msdn.microsoft.com/en-us/library/tw4k6df8(v=vs.80).aspx

你可以做这样的事情(这是跨平台的):

 FILE *const in = fdopen(dup(fileno(stdin)), "rb"); FILE *const out = fdopen(dup(fileno(stdout)), "wb"); /* ... */ fclose(in); fclose(out); 

或者,您可以直接使用fileno(stdin)fileno(stdout)来使用write()read()系统调用。 这些系统调用在较低的级别上运行,不做任何转换。 但他们也没有缓冲,你从FILE流得到。