调用system()运行外部.exe并在出错时检查错误代码:
#include <errno.h>
#include <stdlib.h>
function()
{
errno_t err;
if( system(tailCmd) == -1) //if there is an error get errno
{
//Error calling tail.exe
_get_errno( &err );
}
}
前两个编译错误:
error C2065: 'err' : undeclared identifier
error C2065: 'errno_t' : undeclared identifier
我不知道为什么要包括required and optional header files? 任何帮助表示赞赏。谢谢。
答案 0 :(得分:3)
典型用法如下:
if (somecall() == -1) {
int errsv = errno;
printf("somecall() failed\n");
if (errsv == ...) { ... }
}
取自here。
答案 1 :(得分:2)
在没有任何声明的情况下使用'errno'。它是一个扩展为int值的宏。
答案 2 :(得分:2)
在标准C的世界中,类型“errno_t
”由TR24731-1定义(有关详细信息,请参阅Do you use the TR 24731 'safe' functions?),您必须通过定义'{{1来'激活它' }}”。
但是,您似乎正在使用Windows(从'tail.exe'和非标准'__STDC_WANT_LIB_EXT1__
'判断)。那里的规则可能取决于您使用的C编译器。
您应该可以在'Security Enhancements in the CRT'上查看此MSDN文章中的信息。我的印象是它应该被定义,除非你主动压制该功能,所以检查你是否在你的编辑中主动压制它。
请注意,_get_errno()
等函数的MSVC定义与TR24731-1定义不匹配:
MSDN:
vsnprintf_s()
TR 24731-1:
int vsnprintf_s(
char *buffer,
size_t sizeOfBuffer,
size_t count,
const char *format,
va_list argptr
);
区别不仅仅是类型别名或限定符(int vsnprintf_s(
char * restrict s,
rsize_t n,
const char * restrict format,
va_list arg
);
,rsize_t
)的问题 - MS版本有两种尺寸,标准版本有一种尺寸。非常标准化!