我一直在试图找出写二进制数据从一个C程序到标准输出的最佳途径。 它工作正常,在Linux上,但我有问题,当我在Windows上编译,因为“\ n”被转换为“\ r \ n”。
有没有写入stdout在某种二进制模式避免了换行转换的标准方式? 如果没有,是什么让Windows停止这样做最简单的方法是什么?
我使用的GCC和MinGW。
我一直在试图找出写二进制数据从一个C程序到标准输出的最佳途径。 它工作正常,在Linux上,但我有问题,当我在Windows上编译,因为“\ n”被转换为“\ r \ n”。
有没有写入stdout在某种二进制模式避免了换行转换的标准方式? 如果没有,是什么让Windows停止这样做最简单的方法是什么?
我使用的GCC和MinGW。
您可以使用setmode(fileno(stdout), O_BINARY)
如果你想保持它兼容Linux把它包在IFDEF。
参见: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setmode?view=vs-2017
你可以做这样的事情(这是那种跨平台的):
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
流。