采取这个简单的程序
#include <stdio.h>
#include <string.h>
#include <errno.h>
int
main (void)
{
printf ("ERROR %d %s\n", ETIMEDOUT, strerror (ETIMEDOUT));
return 0;
}
如果用Cygwin gcc编译它,它运行正常
$ gcc a.c
$ ./a
ERROR 116 Connection timed out
如果使用MinGW-w64 gcc编译它,则不会给出正确的错误消息
$ i686-w64-mingw32-gcc a.c
$ ./a
ERROR 138 Unknown error
如何让MinGW-w64输入正确的错误信息?
答案 0 :(得分:2)
ETIMEDOUT
似乎是ISO C标准errno.h的POSIX扩展。 Cygwin比MinGW更好地支持POSIX。有关mingw32 ETIMEDOUT
的错误报告已在2007中打开并关闭。
一种选择是使用GNU可移植性库(Gnulib)。它提供类似POSIX的errno.h和strerror()/strerror_override()。