今天做操作系统实验真是相当的纠结。。当别人都在队列什么的讨论的时候。。我的pc.c始终不给力。。现将遇到的问题总结如下,避免以后再犯~
首先声明一下,我用的是系统调用的方法。真心不知道为什么大家都不使用推荐的系统调用唉。。看来我还是比较听话的嘿嘿~
1、刚开始运行的时候总是会出现死循环一样的死锁状,让我极端郁闷。。后来无意中改了信号量的名字就好了,让我一直以为是信号量的名字和该指针的名字不能一致,还在人人咆哮了一番。。实在是好弱智啊。。其实是自己忘记unlink了。。信号量可不会在你程序退出的时候自动消失哦~所以用unlink把它从系统中kill掉~否则就会出现可怕的
“死锁状”。。。所以说,现在在ubuntu下编程的思路可要改一改,不能总是那种单线程顺序执行的思路,还有操作了系统中的东西,也用了信号量,系统调用什么的,有的东西实在系统中一直存在的,要养成用完了还回去的好习惯,发扬风度嘛~就像yield()...
2、文件读写指针问题也浪费了一点时间,忘记了读写指针其实是一个指针,你读过之后指针的位置也变了,再写的时候指针的位置都要注意啦~
3、我删除第一个数据的时候用的笨笨的方法,和那次java的ATM机一样唉,真不知道为什么不能发明文件行删除的函数。。。我就是读完第一个数据打印出来之后就把后面的都读入数组,然后在写一遍。。BUT。。忘记写O_TRUNC了,导致文件没有覆盖,就超级超级长。。在此感谢liushuaikobe同学的debug功力。。。另外一定要在死循环里面写文件的打开和关闭,不然可就乱套了。。。
4、后来发现文件不存在的时候会一直打印0出来,根本就没有生产嘛。。原来我用的是read的返回值是不是等于零来判断文件是否存在,但是不知到为什么会一直调用,也没有写入文件,我就上网搜到了access函数。access(