Delete 'src/my-online-judge-master/MYOJ/compile_server/compile.hpp'

master
pk4wt2yal 2 weeks ago
parent 0e2b49a6a1
commit 3c8ffd07ee

@ -1,72 +0,0 @@
// 编译模块
#pragma once
#include "./comm/util.hpp"
namespace ns_compile
{
// 提供编译接口
class Compiler
{
public:
Compiler()
{}
~Compiler()
{}
// 编译文件,并且返回编译结果
bool compile(const std::string& file_name)
{
pid_t id = fork();
if (id == -1)
{
// 创建失败
lg(Error, "编译文件时创建子进程失败, errno:%d, strerror:%s\n",errno, strerror(errno));
exit(1);
}
else if (id == 0)
{
// child
umask(0);
int _stderr = open(ns_util::pathUtil::compilerError(file_name).c_str(), O_CREAT | O_WRONLY, 0664);
if (_stderr < 0)
{
lg(Error, "子进程创建_stderr时出错, errno:%d, strerror:%s\n",errno, strerror(errno));
exit(2);
}
int ret = dup2(_stderr, 2);
if (ret == -1)
{
lg(Error, "子进程标准错误重定向错误, errno:%d, strerror:%s\n",errno, strerror(errno));
exit(3);
}
// 进程替换
execlp("g++", "g++", "-o", ns_util::pathUtil::exe(file_name).c_str(), ns_util::pathUtil::src(file_name).c_str(), "-D", "COMPILER_ONLINE", "-std=c++11", nullptr);
lg(Error, "进程替换错误, errno:%d, strerror:%s\n",errno, strerror(errno));
exit(4);
}
else if (id > 0)
{
// parent
waitpid(id, nullptr, 0);
if (ns_util::fileUtil::isFileExist(ns_util::pathUtil::exe(file_name)))
{
lg(Info, "%s 文件编译成功!\n", ns_util::pathUtil::src(file_name).c_str());
return true;
}
lg(Error, "%s 文件编译失败!\n", ns_util::pathUtil::src(file_name).c_str());
return false;
}
else
{
// 意料之外的情况
lg(Debug, "compile创建子进程出现意料之外的情况\n");
exit(5);
}
}
};
}
Loading…
Cancel
Save