红联Linux门户
Linux帮助

linux c使用system调用shell脚本

发布时间:2017-09-08 10:04:33来源:blog.csdn.net/peng314899581作者:linux_c_coding_man
system的原理其实就是调用fork创建子进程去执行shell命令,然后返回最后一条shell命令的状态值。linux下man system可以看到返回值说明:
 
1.如果返回值等于-1就是system函数执行失败,准确的说是fork创建子进程失败。
2.shell执行最后一条语句的状态值放在返回值的低8位,使用WEXITSTATUS宏可以获得状态值。
3.使用WIFEXITED宏取返回值判断是否执行成功,如果返回真就成功。
 
综上,可以看出来,首先我们要判断system返回值不等于-1那么fork成功了,然后判断WIFEXITED为真那么调用shell成功,最后判断WEXITSTATUS获得shell执行状态值是否为0就是成功。
 
int sh_shell(const char *command)
{
int ret = system(command);
if (-1 == ret)
{
printf("sh_shell fork fail");
return -1;
}
else  
{  
printf("sh_shell exit ret = 0x%x", ret);
if (WIFEXITED(ret))  
{
if (0 == WEXITSTATUS(ret))  
{  
printf("sh_shell success");  
return 0;
}  
else  
{
printf("sh_shell fail, shell status: %d", WEXITSTATUS(ret));
return -1;
}  
}  
else  
{  
printf("sh_shell exit status = %d", WEXITSTATUS(ret));  
return -1;
}  
}
 
在脚本中你想返回自定义值,也是可以通过return或者exit返回给程序,程序通过system返回值获得。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/32546.html