linux popen卡在了fgets上
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux popen卡在了fgets上相关的知识,希望对你有一定的参考价值。
伙计们!我使用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
") == 0){
break;
}
}
无论如何,谢谢。
以上是关于linux popen卡在了fgets上的主要内容,如果未能解决你的问题,请参考以下文章
在VMware上安装了kali linux,之后打开相应的虚拟机,可是启动后就卡在了安装这个页面?