注意:执行的命令中带有双引号的话,一定要加 '\'进行转义
1.返回执行状态码:
command参数为需要执行的命令
int executeCommand_noreq(char* command)
{
int returnValue; // 保存命令执行后的返回值
returnValue = system(command); // 调用system()函数执行命令并将返回值保存到returnValue变量中
if (WIFEXITED(returnValue)) { // 判断命令是否正常退出
int exitStatus = WEXITSTATUS(returnValue); // 获取命令的退出状态(返回值)
return exitStatus;
} else {
return -1;
}
}
2.返回命令执行结果的输出:
command参数为需要执行的命令语句,result为malloc的一段内存串
也可以在本函数中malloc,就需要改一改函数,返回这个result
不管在函数内或外,都记得释放掉该内存
void executeCommand(char* command,char* result)
{
// char* result = malloc(COMMEND_BUFSIZE); // 分配一块内存来存储结果
memset(result, 0, COMMEND_BUFSIZE); // 初始化为0,以防数据残留
// 执行命令并将标准输出连接到文件流中
FILE* fp = popen(command, "r");
if (!fp)
{
perror("popen failed");
return ;
}
// 读取文件流中的数据
char buf[COMMEND_BUFSIZE]={0};
memset(buf, '\0', COMMEND_BUFSIZE);
while (fgets(buf, COMMEND_BUFSIZE, fp))
{
if(strlen(result) + strlen(buf) > COMMEND_BUFSIZE){
printf("shell返回结果超出buffer size,进行截断\n");
break;
}
strcat(result, buf); // 将读取到的数据添加到结果中
}
int st=pclose(fp);
if(st==-1)
{
return ;
}
result[strlen(result)-1] = '\0';
return ;
}