Я использую execvp для компиляции программы с ошибкой.Но затем на экране моего терминала появляется сообщение об ошибке, которое не должно произойти, потому что если execvp завершится ошибкой, он только позволит дочернему элементу вернуться со статусом выхода.Я не понимаю, почему мой терминал на самом деле отображает сообщение об ошибке?
Мой массив команд: {gcc, studentcode.c, ourtest3.c, -o, ourtest3.x, NULL} и в ourtest3.c,Я сделал несколько ошибок специально.Моя вызывающая функция выглядит так:
commands = {"gcc", "studentcode.c", "ourtest3.c", "-o", "ourtest3.x", NULL};
int compile_program(Char** commands) {
pid_t pid;
int status;
pid = safe_fork();
if (pid == 0) { /*Child*/
if (execvp(commands[0], commands) < 0) {
exit(0);
}
} else { /*Parent*/
if (wait(&status) == -1) {
return 0;
}
if (WIFEXITED(status)) {
if (WEXITSTATUS(status) != 0) {
return 1;
}
} else {
return 0;
}
}
return 1;
}
ourtest3.c таков:
#include <stdio.h>
#include <assert.h>
#include "studentcode.h"
int main(void) {
assert(product(2, 16) == 32
printf("The student code in public07.studentcode.c works on its ");
printf("third test!\n");
return 0;
}
Моя программа должна была нормально завершиться с возвращаемым значением 0, но вместо этого в моем окне терминала,это показывает, что
ourtest3.c: In function 'main':
ourtest3.c:19:0: error: unterminated argument list invoking macro "assert"
ourtest3.c:13:3: error: 'assert' undeclared (first use in this function)
ourtest3.c:13:3: note: each undeclared identifier is reported only once for each function it appears in
ourtest3.c:13:3: error: expected ';' at end of input
ourtest3.c:13:3: error: expected declaration or statement at end of input