Мне нужно сделать сервер, который:
1) компилирует файл c ++ и сохраняет ошибки в файле, если они существуют;
2) если ошибок нет, я должен запустить файл a.out и извлечь вывод в другой файл.
Проблема заключается в первом.
Чтобы скомпилировать и извлечь ошибки, я использовал больше методов:
1) система ("g ++ file.cpp &> err.txt") - не работает: она печатает ошибки в консоли, но файл остается пустым
2) popen - Ссылка на ссылку: C: Запустить системную команду и получить вывод? : единственное отличие состоит в том, что я открыл другой файл и вместо печати в консоли я использовал fprintf для записи в файл.
Я забыл добавить, что первый метод работает, если записан в виде команды в консоли, но внутри сервера проблематично.
// This code is to show what i have already tried and if you find any
// syntax errors like ; or ' pls ignore them as i couldn't copy the code
// from the docker console. Thank you very much!
//1
system("g++ file.cpp &> err.txt");
if( access( "a.out", F_OK ) != -1 ) {
system("./a.out > output.txt");
//2
FILE *f;
char buff[200];
f = popen("g++ file.cpp", "r");
if (f == NULL) {
printf("Failed to run command\n" );
exit(1);
}
FILE *o;
o = fopen("err.txt", "w");
while (fgets(buff, sizeof(buff)-1, f) != NULL) {
fprintf(o, "%s", buff);
}
fclose(o);
fclose(f);
Я ожидал, что ошибки будут записаны в файле err.txt, который не будет напечатан в консоли, и во всех приведенных выше примерах он печатает в консоли, а файл err.txt остается пустым.