在二进制模式下写入stdout最简单的方法是什么?

时间:2013-06-02 23:42:47

标签: c windows binary newline stdout

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

有没有一种标准方法可以在某种二进制模式下写入stdout,避免换行转换?如果没有,让Windows停止这样做的最简单方法是什么?

我正在使用GCC和MinGW。

2 个答案:

答案 0 :(得分:22)

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

如果你想让它与Linux兼容,请将它包装在ifdef中。

另请参阅:https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setmode?view=vs-2017

答案 1 :(得分:6)

你可以做类似的事情(这是一种跨平台):

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

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