信号量的实现和应用

今天做操作系统实验真是相当的纠结。。当别人都在队列什么的讨论的时候。。我的pc.c始终不给力。。现将遇到的问题总结如下,避免以后再犯~

首先声明一下,我用的是系统调用的方法。真心不知道为什么大家都不使用推荐的系统调用唉。。看来我还是比较听话的嘿嘿~

1、刚开始运行的时候总是会出现死循环一样的死锁状,让我极端郁闷。。后来无意中改了信号量的名字就好了,让我一直以为是信号量的名字和该指针的名字不能一致,还在人人咆哮了一番。。实在是好弱智啊。。其实是自己忘记unlink了。。信号量可不会在你程序退出的时候自动消失哦~所以用unlink把它从系统中kill掉~否则就会出现可怕的
“死锁状”。。。所以说,现在在ubuntu下编程的思路可要改一改,不能总是那种单线程顺序执行的思路,还有操作了系统中的东西,也用了信号量,系统调用什么的,有的东西实在系统中一直存在的,要养成用完了还回去的好习惯,发扬风度嘛~就像yield()...

2、文件读写指针问题也浪费了一点时间,忘记了读写指针其实是一个指针,你读过之后指针的位置也变了,再写的时候指针的位置都要注意啦~

3、我删除第一个数据的时候用的笨笨的方法,和那次java的ATM机一样唉,真不知道为什么不能发明文件行删除的函数。。。我就是读完第一个数据打印出来之后就把后面的都读入数组,然后在写一遍。。BUT。。忘记写O_TRUNC了,导致文件没有覆盖,就超级超级长。。在此感谢liushuaikobe同学的debug功力。。。另外一定要在死循环里面写文件的打开和关闭,不然可就乱套了。。。

4、后来发现文件不存在的时候会一直打印0出来,根本就没有生产嘛。。原来我用的是read的返回值是不是等于零来判断文件是否存在,但是不知到为什么会一直调用,也没有写入文件,我就上网搜到了access函数。access(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值