2009年12月20日星期日

perror会修改errno吗?

程序如下:
-----------------------------------------
#include
int main(){
perror("first");
perror("next");
return 0;
}
-----------------------------------------
执行结果:
-----------------------------------------
first: Success
next: Illegal seek
-----------------------------------------
man手册页中的解释是:
-----------------------------------------
Note that errno is undefined after a successful library call: this call may well change this variable, even though it succeeds, for example because it internally used some other library function that failed. Thus, if a failing call is not immediately followed by a call to perror(), the value of errno should be saved.
-----------------------------------------
第一:在成功返回的前提下,errno是未定义的(因为两条源代码之间可能会好多其他的系统调用/库调用被执行)。
第二:如果在函数调用失败的时候,不立即调用perror()的话,则需要保存errno的值。

没有评论: