当前位置: 技术问答>linux和unix
perror和strerror怎么获取的错误不一致.
来源: 互联网 发布时间:2016-08-17
本文导语: 例如代码如下: if (connect(sock, (struct sockaddr *)s_addr, sizeof(struct sockaddr_in)) sin_addr)); return (-1); } 然后我们可以看到错误信息是: connect failure: Network is unreachable 1 connect failure: Illegal seek ...
例如代码如下:
if (connect(sock, (struct sockaddr *)s_addr, sizeof(struct sockaddr_in)) sin_addr));
return (-1);
}
然后我们可以看到错误信息是:
connect failure: Network is unreachable 1
connect failure: Illegal seek 2
Unable to connect to remote host (210.75.23.149)
红色的1,2都是获取错误信息为什么会出现,两个错误信息不一致呢.
纳闷了.....谁知道怎么回事吗????
if (connect(sock, (struct sockaddr *)s_addr, sizeof(struct sockaddr_in)) sin_addr));
return (-1);
}
然后我们可以看到错误信息是:
connect failure: Network is unreachable 1
connect failure: Illegal seek 2
Unable to connect to remote host (210.75.23.149)
红色的1,2都是获取错误信息为什么会出现,两个错误信息不一致呢.
纳闷了.....谁知道怎么回事吗????
|
Perror 最大的一个弊病是在调用后,很可能会把 errno 设置成 ESPIPE( 对应值为 29,错误描述为”Illegal seek”),影响后面 errno 的使用,这也是它线程不安全的原因之一,我们可以通过下面的实验得出此结论。
说明:宏 PERROR_STRERROR 对应的代码块使用 perror 函数来捕获系统调用 fopen() 得到的错误,然后使用 strerror 函数来查看 perror 函数是否改变 errno 的值。如果两者输出结果不一致,则说明 errno 值被 perror 函数更改了。
以上文字来自于http://tech.ddvip.com/2008-11/122654049391936_5.html
说明:宏 PERROR_STRERROR 对应的代码块使用 perror 函数来捕获系统调用 fopen() 得到的错误,然后使用 strerror 函数来查看 perror 函数是否改变 errno 的值。如果两者输出结果不一致,则说明 errno 值被 perror 函数更改了。
以上文字来自于http://tech.ddvip.com/2008-11/122654049391936_5.html
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。