使用 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);
所以,我有一个用例,我需要强制交叉编译为 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);