强制C使用MINGW将标准输入读取为二进制

时间:2015-06-21 20:50:47

标签: c windows mingw std stdin

所以,我有一个用例,我需要强制一个C程序交叉编译到Windows,以stdin作为二进制格式读取。这对Windows编译器很有用,但不幸的是我正在使用MinGW编译这个程序,所以我无法访问设置stdin的模式,因为这是一个pre-MSDOS,preUNIX约定。在GCC中编译此代码时,如何强制执行此操作?有什么想法吗?

有问题的陈述如下:

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

1 个答案:

答案 0 :(得分:1)

上述语句与编译器无关,而与您链接的头文件和C库无关。

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

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

如果找不到这些,请从微软标题中复制原型和#define

cremno建议:

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

如果确实找不到这些符号,请尝试以下操作:

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