C - perror()不为人知的一面

转自:http://361324767.blog.163.com/blog/static/114902525201251395554338/  

在此太感谢这个版主了,这个问题困扰了我太久了,在此对你表示深深的谢意!

perror的官方解释,我就不说了。直说perror不为人知的一面:

如果连续调用perror,如下:

perror("1");

perror("2");

会出现以下结果:

1:success

2:Illegal seek

这种问题出现的原因是:

perror()是通过lseek方法根据errorno查找对应的错误信息,然后输出的。

在程序运行的时候,errorno的初始值对应的信息为:Success。只有程序中有错误出现时,才会改变给errorno。如果没有错误出现,errorno的值是不会改变的。

但是perror方法是个例外,每次调用perror方法,都会首先输出errorno对应的信息,然后重置errorno为undefined,这时如果马上在一次调用perror,perror中的lseek根据undefined去查找错误信息,就会抛错,错误刚好被记录在errorno中,因此,就把lseek的错误打印出来了。所以第一次调用perror方法的时候会正常数据错误信息,但是如果连续调用第二次,由于第一次的perror调用已经把errorno设置成了undefined,所以连续的第二次,第三次...........第一亿次调用都会输出Illegal seek错误。

-------------------------------------------------------------------------------------------------------------------------------------------------

在此为国内的IT人士表示默哀,出现这个问题的时候,去百度上找,各种找不到,各种抄袭,各种不负责任的错误回答以及各种忽悠,木有办法,去谷歌上找,在英文论坛中终于找到了答案,希望国内的IT人士有点专业精神,不要只是为了混口饭而做IT,侮辱了IT行业。对自己负责,对自己的工作负责。


转自:http://361324767.blog.163.com/blog/static/114902525201251395554338/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值