我一直在试图找出从C程序向stdout写二进制数据的最佳方法。它在Linux上工作正常,但我在Windows上编译时遇到问题,因为“\ n”被转换为“\ r \ n”。
有没有一种标准方法可以在某种二进制模式下写入stdout,避免换行转换?如果没有,让Windows停止这样做的最简单方法是什么?
我正在使用GCC和MinGW。
答案 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
流中获得缓冲。