linux popen卡在了fgets上

问题描述 投票:0回答:1

伙计们!我使用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 ===”。

感谢任何建议!

linux android-emulator popen fgets
1个回答
0
投票

我通过在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;
    }   
}   

无论如何,谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.