使用 MINGW 强制 C 以二进制形式读取标准输入

Force C to readin stdin as binary using MINGW

所以,我有一个用例,我需要强制交叉编译为 Windows 的 C 程序以二进制格式读取标准输入。这对 Windows 编译器非常有用,但不幸的是我正在使用 MinGW 编译这个程序,所以我无法访问设置标准输入的模式,因为这是一个 pre-MSDOS,preUNIX 约定。我如何在 GCC 中编译这段代码的同时强制发生这种情况?有什么想法吗?

错误陈述如下:

__setmode(__fileno(stdin), O_BINARY);
__setmode(__fileno(stdout), O_BINARY);

以上语句与编译器无关,但与您链接到的 header 文件和 C 库有关。

MinGW 使用 Microsoft 运行时库和兼容的 header 文件。您可能对这些函数拼写不正确,请尝试删除一些 _,在 header 文件中为 setmode grep,等等:

grep -r setmode /usr/include
grep -r O_BINARY /usr/include

如果找不到这些,请从 Microsoft headers 复制原型和 #define

cremno 建议:

_setmode(_fileno(stdin), _O_BINARY);
_setmode(_fileno(stdout), _O_BINARY);

如果您真的找不到这些符号,试试这个:

extern int _setmode(int, int);
_setmode(0, 0x8000);
_setmode(1, 0x8000);