gpt4 book ai didi

c - 如何处理在 C 服务器中编译的 C++ 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:13 28 4
gpt4 key购买 nike

我需要制作一个服务器: 1) 编译一个c++文件,如果存在错误,将其保存在一个文件中; 2) 如果没有错误,我必须运行 a.out 文件并将输出提取到另一个文件中。 问题出在第一个。

为了编译和提取错误我使用了更多的方法: 1) system("g++ file.cpp &> err.txt") - 不工作:它在控制台打印错误但文件仍然是空的 2) popen - 引用链接:C: Run a System Command and Get Output? :唯一的区别是我打开了另一个文件,而不是在控制台中打印我使用 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 保持为空。

最佳答案

你可以用老派的方式完成它:

  1. fork()在 child 身上:

  2. 打开一个用于存储标准输出的文件和另一个用于存储错误的文件。

  3. 使用 dup2(oldfd, newfd)将两个文件的描述符复制到 stdout , 和 stderr分别。

  4. 调用 execlp使用 gcc 及其参数。

  5. 在父进程中你可以添加waitpid打电话等 child 说完。

关于c - 如何处理在 C 服务器中编译的 C++ 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54332790/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com