C语言获取linux shell命令返回值
C语言执行linux shell命令,对于没有返回结果的,可直接使用system()函数,对于有返回结果的,可以用popen命令,对其封装后,可以获取相应的返回信息,封装函数如下:
int SystemRtn(const char* Cmd, char* pbyRtnStr)
{
FILE *fp;
int rc = 0;
char result_buf[256];
int nOnceLen = 0;
int nTotalLen = 0;
int i;
fp = popen(Cmd, "r");
if(NULL == fp)
{
perror("popen执行失败!");
return -1;
}
while(fgets(result_buf, 256, fp) != NULL)
{
for (i = 0; i < strlen(result_buf); i++)
{
/*把命令返回的换行符去掉*/
if('\n' == result_buf[i])
{
result_buf[i] = '\0';
}
}
nOnceLen = strlen(result_buf);
memcpy(pbyRtnStr+nTotalLen, result_buf, nOnceLen);
nTotalLen += nOnceLen;
//printf("命令[%s] 输出[%s]\r\n", Cmd, result_buf);
memset(result_buf, 0, nOnceLen);
}
*(pbyRtnStr+nTotalLen) = '\0';
/*等待命令执行完毕并关闭管道及文件指针*/
rc = pclose(fp);
if(-1 == rc)
{
perror("关闭文件指针失败");
return -1;
}
else
{
//printf("命令[%s]子进程结束状态[%d]命令返回值[%d]\r\n", Cmd, rc, WEXITSTATUS(rc));
return 0;
}
}
Cmd:要执行的shell命令
pbyRtnStr:获取shell命令的结果,一般在外部调用时传入数组的指针或动态内存的指针