我一直在试图找出从C程序中写入二进制数据到标准输出的最佳方法。它在Linux上工作得很好,但我在Windows上编译时遇到问题,因为"n"被转换为"rn"。
是否有一种标准的方式来写标准输出在某种二进制模式,避免换行符转换?如果不是,最简单的方法是什么让Windows停止这样做?
我使用GCC和MinGW,并使用fwrite
写stdout
您可以使用setmode(fileno(stdout), O_BINARY)
如果你想让它与Linux兼容,可以把它包装在一个ifdef中。
参见:https://learn.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
流中获得的缓冲