我试图使用popen()
获得子进程的存在状态.
Case 1:调用函数,shell命令返回错误.这是预期的工作.
func("du -sh _invalid_file_");
Output:
du: cannot access '_invalid_file_': No such file or directory
Child exit value: 1
在这里,子存在状态与bash
中运行的退出值du
相同.
$ du -sh _invalid_file_
du: cannot access '_invalid_file_': No such file or directory
$
$ echo $?
1
$
Case 2: (Error case)使用下面的shell命令调用函数返回成功.
func("du -sh");
Output:
Child exit value: 141
请建议解决此问题.将代码粘贴到下面.
int func(char *cmd)
{
FILE *pfp = NULL;
int retval, status;
pfp = popen(cmd, "r");
if (pfp == NULL) {
perror("popen failed");
exit(1);
}
status = pclose(pfp);
if (status < 0) {
perror("pclose error");
} else {
if (WIFEXITED(status)) {
retval = WEXITSTATUS(status);
printf("Child exit value: %d\n", retval);
}
}
return 0;
}