我有一个执行另一个C程序的C程序,这是我的功能:
void execute(char *command, char* option) {
pid_t pid = fork();
if(pid == 0) {
char *argv[] = {"some_fixed_options",option,NULL};
execv(command,argv);
exit(127);
}
else {
waitpid(pid,0,0);
}
}
如果出现错误,execv()将返回-1。现在我的问题是,我可以使用程序中的return语句"命令"?所以我会将函数更改为类似int execute()的函数,并返回从"命令"返回的语句。程序
答案 0 :(得分:3)
是。您可以使用第二个waitpid
参数,状态位置:
int status;
waitpid (pid, &status, 0);
现在WEXITSTATUS(status)
包含command
执行的状态(即main()
返回的值或exit()
提出的值)
答案 1 :(得分:2)
是的,您可以从执行的命令中获取退出状态。您需要做的就是为waitpid
提供一个非NULL的第二个参数,以便它可以存储退出状态信息,然后解释状态信息。
请注意,main
只能有意义地返回一小部分非负整数。实际上,标准C只保证有两个有意义的返回值,但大多数运行时允许256个值:0表示成功执行,1到255表示某种错误。
waitpid
manpage概述了该程序。请参阅example,其简化版本为:
w = waitpid(cpid, &wstatus, 0);
if (w == -1) {
perror("waitpid");
exit(EXIT_FAILURE);
}
if (WIFEXITED(wstatus)) {
printf("exited, status=%d\n", WEXITSTATUS(wstatus));
}
else {
printf("Did not exit normally\b");
}