V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
z742364692
V2EX  ›  程序员

C 语言求思路!!急急急!!

  •  
  •   z742364692 · 2015-11-18 22:07:09 +08:00 · 2975 次点击
    这是一个创建于 3328 天前的主题,其中的信息可能已经有所发展或是发生改变。
    设计一个程序实现对多个源文件读取并且用 gcc 编译运行看是否出错和结果是否正确

    求思路,怎么实现对多个文件的读取,如何调用 gcc ,并且链接 php 前台传送文件。

    谢谢大神,老师偷懒,其实就是想做一个小程序,然后把所有人的期末作业放到一个文件夹里进行批处理,然后打分。。。。。。

    还关照我说,把 php 部分也做了,设计漂亮点

    求大神指点思路,周末就要成品,小弟先谢过

    万能的v2ex
    21 条回复    2015-11-19 17:07:26 +08:00
    LaughingMeMe
        1
    LaughingMeMe  
       2015-11-18 22:11:19 +08:00
    这不是 ACM 的测题么- -
    Valyrian
        2
    Valyrian  
       2015-11-18 22:11:36 +08:00
    execve?
    mahone3297
        3
    mahone3297  
       2015-11-18 22:12:11 +08:00
    思路:
    貌似可以文件上传到 1 个地方,这里用 php ,然后用 gcc 编译到一个地方,然后用 shell 或者 php ( exec 函数),传入你期望的入参,得到返回值,校验程序是否有问题

    我觉得,关键点,在于要做好一个沙盒,不然。。。这其实就相当于一个 oj 吧。。。
    z742364692
        4
    z742364692  
    OP
       2015-11-18 22:12:47 +08:00
    @LaughingMeMe 哦?什么东东,有链接吗,我参考参考,主要是没啥思路,书到用时方恨少
    @Valyrian 这是?
    z742364692
        5
    z742364692  
    OP
       2015-11-18 22:14:04 +08:00
    @mahone3297 后台 c 如何对多个文件依次操作呢(假设这些文件全部传到了一个目录下)?小弟不懂
    feuvan
        6
    feuvan  
       2015-11-18 22:15:03 +08:00   ❤️ 1
    这不是 oj 吗?
    php 的话记得配置好 disable_classes disable_functions 们。。
    LaughingMeMe
        7
    LaughingMeMe  
       2015-11-18 22:16:15 +08:00   ❤️ 1
    acm.hdu.edu.cn....and other else..?
    virusdefender
        8
    virusdefender  
       2015-11-18 22:17:57 +08:00   ❤️ 1
    hustoj php 的 oj

    https://github.com/QingdaoU/OnlineJudge python 的 oj
    wizardoz
        9
    wizardoz  
       2015-11-18 22:22:16 +08:00
    不会帮顶
    northisland
        10
    northisland  
       2015-11-18 22:24:29 +08:00
    多个文件读取,,,顺序读取,还是并行读取?

    C 调用 bash ?只知道 popen 这个函数

    PHP 是最好的语言
    Kirscheis
        11
    Kirscheis  
       2015-11-18 22:24:39 +08:00 via iPhone   ❤️ 3
    告诉你们老师去找个现成的开源 OJ 就可以了。
    https://github.com/mjnaderi/Sharif-Judge
    https://github.com/51isoft/bnuoj
    没事造什么轮子。
    z742364692
        12
    z742364692  
    OP
       2015-11-18 22:40:09 +08:00
    @virusdefender 有没有 c 的,这个做出来,我就直接过了,哈哈
    htfy96
        13
    htfy96  
       2015-11-18 22:44:32 +08:00
    @Kirscheis 看了下第一个 OJ 的后端貌似禁 fork 之类的居然是靠强制#define fork error 然后屏蔽#undef 来实现的……这样随便就能绕过去吧……
    z742364692
        14
    z742364692  
    OP
       2015-11-18 22:46:54 +08:00
    @virusdefender 其实只要知道怎么搞定读多个文件和调用 gcc 问题就解决大半了
    @northisland 顺序的
    hqs123
        15
    hqs123  
       2015-11-18 22:50:11 +08:00
    这个我用 java 也可以实现.
    z742364692
        16
    z742364692  
    OP
       2015-11-18 22:55:05 +08:00
    @hqs123 java 不会,学的 c 和汇编
    adadada
        17
    adadada  
       2015-11-18 23:48:10 +08:00
    一定要用 C 吗?批量编译的部分写个脚本应该就可以搞定了吧?
    oska874
        18
    oska874  
       2015-11-19 00:58:30 +08:00 via Android
    顺序读入多个文件->调用 shell 分别编译->调用 shell 执行程序->调用 shell 比较结果和答案是否一样
    twoconk
        19
    twoconk  
       2015-11-19 08:22:53 +08:00 via Android
    楼上好多正解
    harry890829
        20
    harry890829  
       2015-11-19 09:15:35 +08:00
    Linux C 应该会用 makefile 把,你文件上传之后,根据文件名,生成一个 makefile ,然后执行 shell 命令,“ make &> XXX ”这个 shell 会把 make 的结果写入到一个文件中,然后你读取这个文件,查看是否有 error ,就可以啦
    hitmanx
        21
    hitmanx  
       2015-11-19 17:07:26 +08:00
    这个用脚本语言应该会很简单,用 C\C++的话,执行 shell 指令可以用 std::system(),例子在这里 http://en.cppreference.com/w/cpp/utility/program/system
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:41 · PVG 08:41 · LAX 16:41 · JFK 19:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.