伙计们!我使用popen函数在linux上执行shell脚本(ubuntu16.04)。
char buffer[1024];
char cmd[1024];
snprintf(cmd, 1024, "./vm_manager.sh start %s %d %d", vm_name, vm_start_port, vm_start_core);
FILE *fp = popen(cmd, "r");
while(fgets(buffer, sizeof(buffer), fp) != NULL){
printf("%s", buffer);
fflush(stdout);
}
printf("over=============");
pclose(fp);
在vm_manager.sh中,只需运行一个android模拟器cmd即可启动如下所示的avd:
emulator -avd $VM_NAME -kernel $KERNEL -port $VM_START_PORT -no-window -writable-system -ranchu -cores 4 -gpu mesa &
实际上它会注销模拟器启动日志,但是卡在fgets上并且永远不会打印出“over ===”。
感谢任何建议!
我通过在shell脚本中添加end_flag解决了这个问题:
echo "START_SUCCESS"
然后在c ++中检查end_flag是否显示。如果出现,只需打破fgets循环:
while(fgets(buffer, sizeof(buffer), fp) != NULL){
printf("%s", buffer);
fflush(stdout);
if(strcmp(buffer, "START_SUCCESS\n") == 0){
break;
}
}
无论如何,谢谢。