int System(const char* format, ...)
{
int rval = -1;
if(format)
{
va_list argptr;
va_start(argptr, format);
char* shell = NULL;
if(-1 != vasprintf(&shell, format, argptr))
{
int ret = 0;
if(-1 != (ret = system(shell)))
{
if(WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
{
errno = EINTR;
}
else
{
if(WIFEXITED(ret))
{
if(WEXITSTATUS(ret))
{
errno = ECANCELED;
}
else
{
rval = 0;
}
}
else
{
errno = ECANCELED;
}
}
}
else
{
errno = ECANCELED;
}
free(shell);
}
else
{
errno = ECANCELED;
}
va_end(argptr);
}
else
errno = EINVAL;
return rval;
}
system函数扩展
最新推荐文章于 2019-11-08 19:13:29 发布