25

我一直在试图找出将二进制数据从 C 程序写入标准输出的最佳方法。它在 Linux 上运行良好,但在 Windows 上编译时遇到问题,因为“\n”被转换为“\r\n”。

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

我正在使用 GCC 和 MinGW,并stdout使用fwrite.

4

2 回答 2

32

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

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

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

于 2013-06-02T23:48:05.757 回答
9

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

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

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

于 2015-10-15T19:40:33.777 回答