popen()对所有命令都是成功的

时间:2017-10-12 20:27:04

标签: c fopen popen fgets

无论在popen()中传递什么“cmd”字符串,它永远不会对我失败

因此即使对于随机的“cmd”字符串,fp也永远不会为NULL。

FILE *fp;
char path[1035];
char cmd = "randomrandomrandom";
fp = popen(cmd, "r");

if (fp == NULL) {
    //Handle Error
    exit(1);
}
while (fgets(path, sizeof(path)-1, fp) != NULL) {
    printf("%s", path);
}
pclose(fp);

2 个答案:

答案 0 :(得分:2)

php artisan route:clear 运行 shell 的实例。启动shell通常会成功。您需要确定它是否已成功终止popen本身不能这样做,但popen可以:它返回子进程的状态(如果发生了其他错误,则返回-1)。

因此,为了验证命令是否已成功执行,需要检查pclosepopen的返回值。

答案 1 :(得分:1)

似乎表现得如预期: http://pubs.opengroup.org/onlinepubs/009695399/functions/popen.html

如您所见,popen仅在其内部pipe命令失败时失败 - 无法打开流。例如,所有文件描述符都在使用中