semget()返回0

2011-07-28更新:

   收到两个朋友的邮件,问我semget()返回0的原因,我觉得我在几年前的文章中说的很清楚了啊,难道是我表达有问题????简单的说,就是包含semget()的判断语句少了括号,运算符优先级的问题,如果不清楚,再复习下C语言。我用红色标出了少了的那对括号。


  几个月前,我的程序出现过这种情况,后来自己解决了。昨天有朋友发邮件问我是怎么解决的,告诉他之后,发现他的错误和我的一样。。。那就在这说一下吧,如果你的也返回0,请检查一下代码。

  我之前出现这种情况的代码是这样的:

......

if(semfd = semget(....)==key) //semfd和key已经声明

......

  而我的本意是想这样:

......

if((semfd = semget(.....))==key)

......

  可以看到,开始的代码,逻辑有问题,很明显的问题,似乎我们第一天开始学习C语言时,老师就教育我们不要犯这种错误。但是我检查了很久,才发现这个错误的。细究根源,是我参考的书上有类似的代码,误导了我。让我认为函数的调用没有错误,并且semget返回了0。

 

  现在很多中文版的linuxC编程书籍,其中错误百出。我手头的这本有错误的书,就是《linux下的C编程》,贾明、严世贤编著,雨人科技策划,人民邮电出版社出版的。在此指出,其他朋友在读这本书的时候还是注意一下吧。

  随便举几个错误的地方:

290页倒数第二行:

if ( semid=semget ( IPC_PRIVATE,SEM_NUM,SEM_MODE ) ) ==-1 )   //左右括号数不一致。

297页safesemget()函数中:

if(retval=semget(key,nsems,semflg)==-1)   //这样恐怕看不出有什么问题,看看这个函数在这本书中是如何调用的吧。。。

   此函数的调用(293页最后一行):

   semid=safesemget(IPC_PRIVATE,2,SHM_RISHM_W);

看到了吧,我当时就是被这函数例子给误导了,出现了第一种错误。当然,也怪我,用的时候没有思考一下,人家怎么写,我就怎么用,偷懒了。

 

  之前还看过一本linnxC的书,也是错误百出,忘了叫什么名字了,并且这两本书中的例子,很多都相同,真服了。。。。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值