C popen()对所有命令都成功

C popen()对所有命令都成功,c,fopen,popen,fgets,C,Fopen,Popen,Fgets,无论在popen()中传递什么“cmd”字符串,我都不会失败 因此,即使对于随机的“cmd”字符串,fp也永远不会为NULL 它的表现似乎与预期相符: 如您所见,popen只有在其内部管道命令失败时才会失败——流无法打开。例如,所有文件描述符都在使用中popen运行shell实例。启动shell通常会成功。您需要确定它是否已成功终止popen本身无法执行此操作,但是pclose可以:它返回子进程的状态(如果发生另一个错误,则返回-1) 因此,为了验证命令是否已成功执行,需要检查popen和pc

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

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


它的表现似乎与预期相符:


如您所见,popen只有在其内部
管道
命令失败时才会失败——流无法打开。例如,所有文件描述符都在使用中

popen
运行shell实例。启动shell通常会成功。您需要确定它是否已成功终止
popen
本身无法执行此操作,但是
pclose
可以:它返回子进程的状态(如果发生另一个错误,则返回-1)


因此,为了验证命令是否已成功执行,需要检查
popen
pclose

popen
的返回值,而不管您传递给它的命令是什么,或者命令是否有意义。只有当它无法将您的命令传递到
execv
时,它才会失败。非常感谢!!我明白了
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);