什么是写在二进制模式标准输出最简单的方法?什么是写在二进制模式标准输出最简单的方法?(What is

2019-05-12 07:09发布

我一直在试图找出写二进制数据从一个C程序到标准输出的最佳途径。 它工作正常,在Linux上,但我有问题,当我在Windows上编译,因为“\ n”被转换为“\ r \ n”。

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

我使用的GCC和MinGW。

Answer 1:

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

如果你想保持它兼容Linux把它包在IFDEF。

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



Answer 2:

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

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流。



文章来源: What is the simplest way to write to stdout in binary mode?