mirror of
https://github.com/MeiK2333/river.git
synced 2025-11-04 14:49:40 +08:00
add language: Go
This commit is contained in:
parent
05986d6923
commit
31caf33d9d
0
example/go/1000/in.txt
Normal file
0
example/go/1000/in.txt
Normal file
6
example/go/1000/main.go
Normal file
6
example/go/1000/main.go
Normal file
@ -0,0 +1,6 @@
|
||||
package main
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("Hello World!")
|
||||
}
|
||||
1
example/go/1000/out.txt
Normal file
1
example/go/1000/out.txt
Normal file
@ -0,0 +1 @@
|
||||
Hello World!
|
||||
1
example/go/1001/in.txt
Normal file
1
example/go/1001/in.txt
Normal file
@ -0,0 +1 @@
|
||||
2 3
|
||||
9
example/go/1001/main.go
Normal file
9
example/go/1001/main.go
Normal file
@ -0,0 +1,9 @@
|
||||
package main
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
var a, b int
|
||||
fmt.Scan(&a)
|
||||
fmt.Scan(&b)
|
||||
fmt.Println(a + b)
|
||||
}
|
||||
1
example/go/1001/out.txt
Normal file
1
example/go/1001/out.txt
Normal file
@ -0,0 +1 @@
|
||||
5
|
||||
@ -17,6 +17,8 @@ def judge(path, language):
|
||||
filename = "Main.java"
|
||||
elif language == river_pb2.Rust:
|
||||
filename = "main.rs"
|
||||
elif language == river_pb2.Go:
|
||||
filename = "main.go"
|
||||
with open(path.joinpath(filename), "rb") as fr:
|
||||
code = fr.read()
|
||||
with open(path.joinpath("in.txt"), "rb") as fr:
|
||||
@ -67,6 +69,11 @@ def run():
|
||||
for item in stub.Judge(judge(path, river_pb2.Rust)):
|
||||
print(item)
|
||||
print(f"{path} 评测完成")
|
||||
for path in Path("go").iterdir():
|
||||
print(f"开始评测 {path}")
|
||||
for item in stub.Judge(judge(path, river_pb2.Go)):
|
||||
print(item)
|
||||
print(f"{path} 评测完成")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
23
src/allow.rs
23
src/allow.rs
@ -6,19 +6,31 @@ pub fn gen_rules() -> Vec<SyscallRuleSet> {
|
||||
allow_syscall(libc::SYS_access),
|
||||
allow_syscall(libc::SYS_arch_prctl),
|
||||
// allow_syscall(libc::SYS_brk),
|
||||
allow_syscall(libc::SYS_chdir),
|
||||
allow_syscall(libc::SYS_chmod),
|
||||
allow_syscall(libc::SYS_chown),
|
||||
allow_syscall(libc::SYS_clock_adjtime),
|
||||
allow_syscall(libc::SYS_clock_getres),
|
||||
allow_syscall(libc::SYS_clock_gettime),
|
||||
allow_syscall(libc::SYS_clone),
|
||||
allow_syscall(libc::SYS_close),
|
||||
allow_syscall(libc::SYS_connect),
|
||||
allow_syscall(libc::SYS_copy_file_range),
|
||||
allow_syscall(libc::SYS_epoll_create1),
|
||||
allow_syscall(libc::SYS_epoll_ctl),
|
||||
allow_syscall(libc::SYS_epoll_pwait),
|
||||
allow_syscall(libc::SYS_dup),
|
||||
allow_syscall(libc::SYS_dup2),
|
||||
allow_syscall(libc::SYS_dup3),
|
||||
allow_syscall(libc::SYS_execve),
|
||||
allow_syscall(libc::SYS_exit),
|
||||
allow_syscall(libc::SYS_exit_group),
|
||||
allow_syscall(libc::SYS_fallocate),
|
||||
allow_syscall(libc::SYS_fchdir),
|
||||
allow_syscall(libc::SYS_fchmod),
|
||||
allow_syscall(libc::SYS_fchmodat),
|
||||
allow_syscall(libc::SYS_fchown),
|
||||
allow_syscall(libc::SYS_fchownat),
|
||||
allow_syscall(libc::SYS_fcntl),
|
||||
allow_syscall(libc::SYS_fork),
|
||||
allow_syscall(libc::SYS_fstat),
|
||||
@ -26,6 +38,7 @@ pub fn gen_rules() -> Vec<SyscallRuleSet> {
|
||||
allow_syscall(libc::SYS_futex),
|
||||
allow_syscall(libc::SYS_getcwd),
|
||||
allow_syscall(libc::SYS_getdents),
|
||||
allow_syscall(libc::SYS_getdents64),
|
||||
allow_syscall(libc::SYS_getegid),
|
||||
allow_syscall(libc::SYS_geteuid),
|
||||
allow_syscall(libc::SYS_getgid),
|
||||
@ -43,9 +56,12 @@ pub fn gen_rules() -> Vec<SyscallRuleSet> {
|
||||
allow_syscall(libc::SYS_madvise),
|
||||
// allow_syscall(libc::SYS_mmap),
|
||||
allow_syscall(libc::SYS_mkdir),
|
||||
allow_syscall(libc::SYS_mkdirat),
|
||||
allow_syscall(libc::SYS_mlock),
|
||||
allow_syscall(libc::SYS_mprotect),
|
||||
// allow_syscall(libc::SYS_munmap),
|
||||
allow_syscall(libc::SYS_nanosleep),
|
||||
allow_syscall(libc::SYS_newfstatat),
|
||||
allow_syscall(libc::SYS_open),
|
||||
allow_syscall(libc::SYS_openat),
|
||||
allow_syscall(libc::SYS_pipe2),
|
||||
@ -53,9 +69,13 @@ pub fn gen_rules() -> Vec<SyscallRuleSet> {
|
||||
allow_syscall(libc::SYS_prctl),
|
||||
allow_syscall(libc::SYS_pread64),
|
||||
allow_syscall(libc::SYS_prlimit64),
|
||||
allow_syscall(libc::SYS_pwrite64),
|
||||
allow_syscall(libc::SYS_pwritev),
|
||||
allow_syscall(libc::SYS_read),
|
||||
allow_syscall(libc::SYS_readlink),
|
||||
allow_syscall(libc::SYS_readlinkat),
|
||||
allow_syscall(libc::SYS_rename),
|
||||
allow_syscall(libc::SYS_renameat),
|
||||
allow_syscall(libc::SYS_rmdir),
|
||||
allow_syscall(libc::SYS_rt_sigaction),
|
||||
allow_syscall(libc::SYS_rt_sigprocmask),
|
||||
@ -73,11 +93,14 @@ pub fn gen_rules() -> Vec<SyscallRuleSet> {
|
||||
allow_syscall(libc::SYS_statx),
|
||||
allow_syscall(libc::SYS_sysinfo),
|
||||
allow_syscall(libc::SYS_tgkill),
|
||||
allow_syscall(libc::SYS_unlinkat),
|
||||
allow_syscall(libc::SYS_umask),
|
||||
allow_syscall(libc::SYS_uname),
|
||||
allow_syscall(libc::SYS_unlink),
|
||||
allow_syscall(libc::SYS_utimensat),
|
||||
allow_syscall(libc::SYS_vfork),
|
||||
allow_syscall(libc::SYS_wait4),
|
||||
allow_syscall(libc::SYS_waitid),
|
||||
allow_syscall(libc::SYS_write),
|
||||
allow_syscall(libc::SYS_writev),
|
||||
]
|
||||
|
||||
@ -59,7 +59,8 @@ pub async fn judger(
|
||||
// 开始执行并等待返回结果
|
||||
let mut runner = process.runner.clone();
|
||||
// 为 Java 虚拟机取消内存限制和 trace(万恶的 JVM)
|
||||
if request.language == Language::Java as i32 {
|
||||
// 看起来虚拟机语言都有同样的问题
|
||||
if request.language == Language::Java as i32 || request.language == Language::Go as i32 {
|
||||
runner.memory_limit = -1;
|
||||
runner.traceme = false;
|
||||
}
|
||||
@ -131,7 +132,7 @@ pub async fn compile(
|
||||
Some(Language::Rust) => "/root/.cargo/bin/rustc main.rs -o a.out -C opt-level=2",
|
||||
Some(Language::Node) => "/usr/bin/node /plugins/js/validate.js main.js",
|
||||
Some(Language::TypeScript) => "/usr/bin/tsc main.ts",
|
||||
Some(Language::Go) => "/usr/bin/go build -ldflags \"-s -w\" main.go",
|
||||
Some(Language::Go) => "/usr/bin/go build -o a.out main.go",
|
||||
Some(Language::Java) => "/usr/bin/javac Main.java",
|
||||
None => return Err(Error::LanguageNotFound(request.language)),
|
||||
};
|
||||
@ -149,7 +150,7 @@ pub async fn compile(
|
||||
let mut runner = process.runner.clone();
|
||||
runner.traceme = false;
|
||||
// 为 Java 虚拟机取消内存限制(万恶的 JVM)
|
||||
if request.language == Language::Java as i32 {
|
||||
if request.language == Language::Java as i32 || request.language == Language::Go as i32 {
|
||||
runner.memory_limit = -1;
|
||||
}
|
||||
if request.language == Language::Rust as i32 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user