简单自动判题系统的实现(part1)

第一部分暂时只写主程序,目前的程序只包括了正确性检查,内存检查待完成

示例代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using std::cin;
using std::cout;
using std::endl;
using std::sort;
class vector{
private:
    int size;
    int number;
    int * data;
public:
    vector(int size){
        this->size=size;
        number=0;
        data=new int[size];
    }
    vector(vector &v){
        size=v.size;
        number=v.number;
        data=new int[size];
        for (int i = 0; i <number ; ++i) {
            data[i]=v.data[i];
        }
    }
    vector(){
        size=5;
        data=new int[size];
        number=0;
    }
    ~vector(){
        //这里故意空着
    }
    void insert(int value){
        if(number==size){
            expand();
        }
        data[number]=value;
        number++;
    }
    void expand(){

        int *temp=new int[size];
        for (int i = 0; i < size; ++i) {
            temp[i]=data[i];
        }
        delete[] data;

        data=new int[2*size];
        for(int i=0;i<size;i++){
            data[i]=temp[i];
        }
        size=size*2;
        delete [] temp;

    }
    void show(){
        for (int i = 0; i <number ; ++i) {
            cout<<data[i]<<" ";
        }
        cout<<endl;
    }
    void sort_array(){
        sort(data,data+number);
    }
};


int main(){
    freopen("testcase.in","r",stdin);
    vector v1(5);
    for (int i = 0; i <7 ; ++i) {
        v1.insert(i);
    }
    v1.show();
    vector v2(v1);
    int input;
    for (int i=0;i<5;i++){
        cin>>input;
        v2.insert(input);
    }
    v2.show();
    v1.show();
    v2.sort_array();
    v2.show();
    return 0;
}


判题代码

#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
int case_test();
//int mem_test();
int main(){
    cout<<"case test running......"<<endl;
    case_test();
    cout<<"memory test running......"<<endl;
//    mem_test();
    return 0;
}

int case_test(){
    pid_t p1=fork();
    if(p1==0){//child process
        int fd=open("your_vector.txt",O_RDWR | O_CLOEXEC | O_TRUNC | O_CREAT, S_IRWXU | S_IRWXG);
        if(fd<0){
            perror("Failed to open txt file");
            exit(1);
        }
        dup2(fd,STDOUT_FILENO);
        execlp("./your_vector.out","./your_vector.out",NULL);
        perror("Execlp failed:");
        exit(1);
    }
    else if(p1>0){//parent process
        int status;
        pid_t w_result=waitpid(p1,&status,0);
        if(w_result==-1){
            perror("Failed to wait");
            exit(1);
        }
        pid_t p2=fork();
        if(p2==0){//child process
            int fd_null=open("/dev/null",O_RDWR);
            dup2(fd_null,STDOUT_FILENO);
            execlp("diff","diff","your_vector.txt","your_vector_solution.txt");
            perror("Execlp diff failed");
            exit(1);
        }
        else if(p2>0){
            int status2;
            waitpid(p2,&status2,0);
            if(WIFEXITED(status2)){
                if(WEXITSTATUS(status2)!=0){
                    cout<<"case test failed"<<endl;
                }
                else{
                    cout<<"case test passed"<<endl;
                }
            }
            
        }
        else{
            perror("Failed to fork");
            exit(1);
        }

    }
    else{
        perror("Failed to fork");
        exit(1);
    }
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,601评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,527评论 25 707
  • 可能是韩剧看多了对初雪莫名的喜欢,执着憧憬着雪后的浪漫,和男友说今年的第一场雪要一起去看电影,看完电影在...
    云想May阅读 281评论 0 1
  • 什么是多线程? 说白了就是CPU快速的在多条线程之间调度(即切换),且多条线程可以并发执行(即同时执行)提到多线程...
    SK丿希望阅读 162评论 0 1
  • 这一学期,我从阜宁来到全国第一状元县 —安徽省休宁县的晨山学校学习。现在这里天天都是太阳照耀着大地,非常暖和,...
    竣_0042阅读 547评论 3 1