如果连续调用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/