OJ学习笔记5

来源:互联网 发布:网络销售许可证 编辑:程序博客网 时间:2024/06/10 19:22

OJ项目做完后,我会整理两三个内容,将整个项目的构架和代码,文档,还有学习过程进行整理写出。


最近一直在研究OJ,将代码一句句的过,然后整理自己需要的代码,前半部分的judged文件已经整理

的差不多了,今天开始测试。

测试过程中遇到了下面的一些问题。

-----------2月21日问题记录-------------------------------------------------------------------------------

① 测试过程中需求添加prinft语句,将适当的变量输出查看,同时也可以监控程序的运行过程,对于不会gdb

调试的我来说,这种方法无非是种很直观可靠的方法。

在添加printf语句的时候,观察到在这么三个语句之前的printf都能正确输出,之后的都不能正确输出。这三个

语句就是:

close(0);close(1);close(2);

这三句的意思就是关闭系统的标准输出和输入,关闭错误输出。

具体的意思会整理成文档,在最后统一写出。

之后,我暂时注释掉了这几句话,然后输出变得正常了。


②继续往下测试的时候遇到提示语句:/home/judge/ alread has one judged on it !

字面意思就是:已经有一个judges在/home/judge/目录下工作了。这句话是在源代码中就有的一句话,在代码

中属于错误处理的一部分。我的理解是因为原来的judged还在工作,我利用的原来的judged的整个目录结构,只是

改变了judged这个文件的内容,并没有停止之前的judged。所以,当我的judged文件准备锁定/home/judge/目录时,

发现已经被别人锁住了,所以不能重锁。

之后,通过仔细观察代码,发现代码是通过获取一个文件内容来获取judged的。那个文件就是/home/judge/etc/judge.pid

,查看文件的详细信息后,发现只是一个普通文件(文件的权限和创建者等信息),因为是pid文件,不知道怎么查看

就直接删除了,重新运行我自己整理的那部分代码,运行OK,没有出现原来的那句/home/judge/ alread has one judged on it !

,新的judge.pid文件被我整理的代码重新创建。

然后编译再运行,又出现那个提示,重复上面的步骤,解决。


-----------2月21日问题记录-------------------------------------------------------------------------------

已经解决2月21日的问题了,是因为一直有个judged进程在进行数据库轮询,而我设置的只允许一个进程

去轮询数据库,所以重新编译运行的时候出错。

解决方法是:用ps aux|grep judged命令找到这个进程。查看进程号,然后用kill -9 xxxx,命令杀死这个进程。

之后重新编译运行,就可以了。

-----------4月18日问题记录-------------------------------------------------------------------------------

0 0